在覆盖一些赋值方法时,我发现如果我在field_two方法中使用隐式接收器,则第一个重写方法field_one不会被调用。相反,默认的' field_one ='似乎被称为。
#controller
def do_something
@something=Something.first
@something.field_two="some_value"
end
class Something<ActiveRecord::Base
def field_one=(value)
puts "hi"
write_attribute(:field_g_five,value)
end
def field_two=(value)
field_one="whatever"
write_attribute(:field_g_one,value)
end
end
但是,如果我将接收器更改为显式,则会调用我的重写方法:
def field_two=(value)
self.field_one="whatever"
write_attribute(:field_g_one,value)
end
这里发生了什么?
答案 0 :(得分:4)
默认field_one
未被调用,您在方法中设置了名为field_one
的本地变量。
如果您想明确表示要在该类中调用field_one
方法,则必须在其前面添加self
。