rails条件验证可能存在错误?

时间:2013-07-02 15:00:53

标签: ruby-on-rails validation

我有一个允许我编辑条目的表单。我有一组辅助属性,如果其中一个属性值必须全部在这里。我使用条件验证来执行此操作:

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!

为什么我的情况表现得很糟糕,我该怎么办?

我可以做些什么来避免这种情况?

1 个答案:

答案 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对于内联块有点长,但这更多的是意见问题。