在我構建學習的應用程序中,我希望進行條件驗證,其中必須至少存在1個字段中的1個。有條件驗證 - 必須存在2個字段中的1個
validates :key, presence: :true, if: "key_position.nil?"
validates :key_position, presence: :true, if: "key.nil?"
我跟着rails validation guide,但沒有得到它的工作。
在我構建學習的應用程序中,我希望進行條件驗證,其中必須至少存在1個字段中的1個。有條件驗證 - 必須存在2個字段中的1個
validates :key, presence: :true, if: "key_position.nil?"
validates :key_position, presence: :true, if: "key.nil?"
我跟着rails validation guide,但沒有得到它的工作。
你有:
前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? }
試試這個
validates :key, presence: true, unless: :key_position
validates :key_position, presence: true, unless: :key
或者你可以使用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
只是另一種解決方案爲您:)
以及如何爲錯誤添加消息通知?現在說請審查下面的問題 –
固定 ':' 前的真實; tx注意。然而,這兩件作品都沒有。 –
@DimitrideRuiter這是不可能的。這是1000%正確的方式來做條件驗證。用'save!'或'create!'保存你的對象,看看它是不是其他的錯誤 –
我知道這就是爲什麼我不明白。我使用'@ tag.update(tag_params)'(保存!因爲某些原因不起作用) –