カスタム検証メソッドで、属性がインスタンス変数としてアクセス可能ではなく、ローカル変数として渡されるのはなぜですか?
以下のカスタム検証の@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
ですか?