我有一个attr_accessor
的模型,我在这个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 :(得分: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