2013-07-02 49 views
0

我有一個允許我編輯條目的表單。如果其中一個具有值,我必須擁有第二組屬性。我使用條件驗證來做到這一點:在rails條件驗證中可能存在的錯誤?

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

您可以將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

無論如何,我可能會把它包裝在一個方法中;國際海事組織對於一個在線區塊來說有點長,但這更多的是意見。