ActiveRecord の with_options に関する注意書き

with_options (Object) - APIdock にて、ActiveRecord の with_options について注意書きが書かれていたのでメモ。 和訳はちょっと雑です。


with_options はネストすることができ、receiver に引き継がれます。

メモ: ネスト階層は継承したデフォルトオプション値を自身のオプションとマージします。

class Post < ActiveRecord::Base
  with_options if: :persisted?, length: { minimum: 50 } do
    validates :content, if: -> { content.present? }
  end
end

このコードは以下と等価です。

validates :content, length: { minimum: 50 }, if: -> { content.present? }

継承されたデフォルトの if キーは無視されます。