そこで、Rails モデルの検証に条件付きの allow_nil オプションを使用できるかどうか疑問に思っていました。
私がやりたいことは、いくつかのロジック(他の属性)に応じて allow_nil できるようにすることです
ドラフトとして保存できる製品モデルがあります。下書きとして保存されている場合、価格はゼロになる可能性がありますが、下書き保存されていない場合、価格は数値でなければなりません。どうすればこれを達成できますか。以下はうまくいかないようです。ドラフトの場合は機能しますが、ステータスがドラフトでない場合でも nil を許可します。
class Product<ActiveRecord::Base
attr_accessible :status, price
validates_numericality_of :price, allow_nil: :draft?
def draft?
self.status == "draft"
end
end
rails docs を見ると、メソッドを allow_nil に渡すオプションがないように見えますか?
考えられる解決策の 1 つは、両方のケースに対して別々の検証を行うことです。
with_options :unless => :draft? do |normal|
normal.validates_numericality_of :price
end
with_options :if => :draft? do |draft|
draft.validates_numericality_of :price, allow_nil: true
end
これを機能させる他の方法はありますか?
ありがとう