我有一个允许我编辑条目的表单。我有一组辅助属性,如果其中一个属性值必须全部在这里。我使用条件验证来执行此操作:
validates_presence_of :raison_sociale,:nom_contact,
:prenom_contact,:telephone,
if: (:nom_contact?||:raison_sociale?||
:prenom_contact? || :telephone?)
但奇怪的是,这4个字段的评估方式不一样!如果我删除nom_contact,它会保存。但如果我将其删除并打电话,它就会失败。
我观察到的是,如果它是if条件中的第一个,它忽略了一个空白字段!一旦我将prenom联系作为第一个条件,我就无法在没有nom_contact的情况下保存,但现在它被忽略了prenon_contact!
为什么我的情况表现得很糟糕,我该怎么办?
我可以做些什么来避免这种情况?
答案 0 :(得分:1)
您可以将if
验证放在proc。
"Symbol-only" conditional validation expects a symbol for the name of a method that will be called
你包括条件,AFAIK在没有处理过程中将无法工作。
您可以使用数组as per the docs执行某些组合:
class Computer < ActiveRecord::Base
validates :mouse, presence: true,
if: ["market.retail?", :desktop?]
unless: Proc.new { |c| c.trackpad.present? }
end
但这些是and
,而不是or
。
无论如何,我可能会把它包装成一个方法; IMO对于内联块有点长,但这更多的是意见问题。