在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