2015-11-13 31 views
0

我有一個與attr_accessor模型,我給這個attr_accessor添加一個錯誤。它爲什麼有效?下面的代碼是自解釋的,我想:Rails認爲與attr_accessor模型是有效的,但它不

class Dealer < AR::Base 
    attr_accessor :keyword_data 

    def keyword_data=(file) 
    begin 
     parse_values(file) 
    rescue CSVKeywordsParser::ReadError => e 
     errors.add(:keyword_data, e.message) 
    end 
    end 
end 

>> dealer.errors 
=> #<ActiveModel::Errors:0x007ff586359610 @base=#<Dealer id: 6, name: "Something">, @messages={}> 
>> dealer.errors.any? 
=> false 
>> dealer.add :keyword_data, "xxx" 
=> ["xxx"] 
>> dealer.errors 
=> #<ActiveModel::Errors:0x007ff586359610 @base=#<Dealer id: 6, name: "Something">, @messages={:keyword_data=>["xxx"]}> 
>> dealer.errors.any? 
=> true 
>> dealer.valid? 
=> true 

我如何添加錯誤attr_accessor將通過activemodel的跟蹤,所以,dealer.valid?將返回false(因爲它是需要)?

+0

'有效?'運行的所有驗證。爲了用'valid?'返回有意義的值,你必須爲你的模型添加驗證。 – sugaryourcoffee

回答

1

查看路線valid?。它首先清除任何錯誤,然後運行驗證。如果您手動添加錯誤,則不會看到它。奇怪的,但源說。修復將爲keyword_data添加驗證,以便自動提取。

def valid?(context = nil) 
    current_context, self.validation_context = validation_context, context 
    errors.clear 
    run_validations! 
ensure 
    self.validation_context = current_context 
end 

https://github.com/rails/rails/blob/107f4282bbfabc011d5ad3bcf3fb3c6fb812ad30/activemodel/lib/active_model/validations.rb#L334

+0

你能解釋我怎麼寫這個驗證嗎? – asiniy

+0

@asiniy不知道驗證應該是什麼(你的代碼沒有註明) –

+0

更新了我的'Dealer'類 – asiniy

相關問題