在自定义验证方法中,为什么属性作为局部变量传递,而不是作为实例变量可访问?
我期望使用@title
而不是title
在下面的自定义验证中,但@title
在nil
下面的代码中。title
包含实际数据。
attr_accessible :title
validate :do_check_title
def do_check_title
title =~ /^Alice in/ || errors.add(:title, "Not Alice in Wonderland")
end
查看 active_record/core.rb
def initialize(attributes = nil)
...
assign_attributes(attributes) if attributes
...
end
然后在 active_record/attribute_assignment.rb
def _assign_attribute(k, v)
public_send("#{k}=", v)
所以我想,这些属性应该可以作为验证函数中的实例变量使用。
他们为什么nil
?