在Rails中重写实例方法
在覆盖一些赋值方法时,我发现如果我在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
这里发生了什么?
默认的field_one
没有被调用,你在方法中设置了一个名为field_one
的局部变量。
如果要明确表示要在field_one
调用field_one
方法,则必须在其field_one
加上self
。