2011-09-26 29 views
2

我試圖用一個validates_with驗證,一些代碼,確保兩個標誌不同時爲真:Rails的validates_with錯誤:屬性不能爲空

validates_with ConfirmationValidator 

class ConfirmationValidator < ActiveModel::Validator 
    def validate(record) 
    if record.confirmed_good && record.confirmed_bad 
     record.errors[:base] << "Record is both confirmed and confirmed_bad" 
    end 
    end 
end 

但在嘗試使用此得到以下錯誤:

gems/activemodel-3.0.7/lib/active_model/validator.rb:142:in `initialize': :attributes cannot be blank (RuntimeError) 

通過文件尋找使它看起來像,這是由於通過選擇一些問題,但我還是不太知道什麼錯。有任何想法嗎?

+1

請發佈您的型號代碼的其餘部分。第142行的錯誤與EveryValidator有關。 https://github.com/rails/rails/blob/master/activemodel/lib/active_model/validator.rb – Gazler

+0

只是一個設計評論在這裏 - 確認可能只是一個布爾值是真或假,問題消失 或confirmed_bad可能只是一種返回的方法!confirmed_good? – Ghoti

回答

4

正如@Gazler指出的那樣,你的錯誤實際上映射到了一個EachValiator初始化問題。我遇到了同樣的問題。

我正在運行軌3.0.9,使用ActiveModel 3.0.9,不是你似乎正在運行相同的堆棧。我只是從自定義驗證器開始。我有一個ActiveModel :: EachValidator,不完全是你的代碼示例所說的。 EachValidator需要在選項中作爲數組傳遞給validates_with的屬性,例如

class Something < ActiveRecord::Base 
    validates_with GenericValidator, :attributes=>[:name, :image] 
end 
0

如果您將驗證程序的名稱命名爲Rails驗證程序,則會發生這種情況。例如,將您的驗證器命名爲:

PresenceValidator將導致此例外。