2017-09-18 9 views
1

にこのコードは、私のために働いていないが、デバッガは、トリガーを行い、その値が、私は私のテストケースのために期待されている:相互に排他的で、フィールドの存在を強制レール

validates :a, :presence => false, :if => Proc.new { |f| debugger; f.b.present? } 
validates :b, :presence => false, :if => Proc.new { |f| debugger; f.a.present? } 

目標:ab同時に定義されるべきではありません。

文法を理解すると、bが存在する場合、aの存在はfalseになるはずです。 bの場合も同様です。

私はこれを誤解していますか?私はデータがsave!を介して記録されていると信じています。しかし、私はすでにバリデーションが呼ばれていることを確認しました。私はobj.save!の直後のオブジェクトを見て、obj.errorsは空のmessagesハッシュを持っています。

答えて

0

論理 '場合は、' 問題がでない - presence: falsepresence: true

リファレンスの反対ではありません:Rails 3 Validation :presence => false

私が使用して終了:

validates :a, length: {is: 0}, if: Proc.new { |f| f.b.present? } 
validates :b, length: {is: 0}, if: Proc.new { |f| f.a.present? } 
関連する問題