2016-10-19 11 views
2

私が学ぶために構築したアプリケーションでは、少なくとも2つのフィールドのうちの1つが存在しなければならない条件付き検証を行います。条件付き検証 - 2つのフィールドのうちの1つが存在する必要があります

validates :key, presence: :true, if: "key_position.nil?" 
validates :key_position, presence: :true, if: "key.nil?" 

私はrails validation guideに従っていますが、動作しません。

答えて

1

あなたは間違っている、true:を抱えている:

validates :key,   presence: true, unless: 'key_position.blank?' 
validates :key_position, presence: true, unless: 'key.blank?' 

または

validates :key,   presence: true, unless: ->(obj) { obj.key_position.blank? } 
validates :key_position, presence: true, unless: ->(obj) { obj.key.blank? } 
+0

は、固定された 'を:' 真の前に。気づくためのtx。しかし、2つの作品のどちらも。 –

+0

@DimitrideRuiter不可能です。条件付き検証を行うには、これは1000%正しい方法です。あなたのオブジェクトを 'save!'または 'create! 'で保存し、それが何か間違っているかどうかを確認してください。 –

+0

私はそれがわからない理由を知っています。 –

0

validates :key,   presence: true, unless: :key_position 
validates :key_position, presence: true, unless: :key 
2

それとも、セマンティック条件のためcustom methodを使用することができ、これを試してみてください。

validate :at_least_one_of_key_or_key_position 

private 

def at_least_one_of_key_or_key_position 
    unlsee key.present? || key_position.present? 
    errors.add(:base, "at least one of key or key_position should exist") 
    end 
end 

はちょうどあなたのための別の解決策:)

+0

と、エラーメッセージをどのように追加しますか?通知?今すぐ確認してください以下の問題 –

関連する問題