0

我有一个允许我编辑条目的表格。我有一组辅助属性,如果其中一个具有值,则它们必须全部存在。我使用条件验证来这样做:

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 被忽略了!

为什么我的条件表现得很奇怪,我该怎么办?

我该怎么做才能避免这种情况?

4

1 回答 1

1

您可以将if验证放在 proc 中。

“仅符号”条件验证需要一个符号作为将被调用方法的名称。

你包括条件,AFAIK 在没有 proc 的情况下将无法工作。

根据文档,您可以使用数组进行一些组合:

class Computer < ActiveRecord::Base
  validates :mouse, presence: true,
                    if: ["market.retail?", :desktop?]
                    unless: Proc.new { |c| c.trackpad.present? }
end

但那些是and,不是or

无论如何,我可能会将其包装在一种方法中;IMO 对于内联块来说有点长,但这更像是一个见仁见智的问题。

于 2013-07-02T15:08:50.883 回答