重写Rails中的实例方法

时间:2014-07-01 04:46:05

标签: ruby-on-rails ruby activerecord

在覆盖一些赋值方法时,我发现如果我在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  

这里发生了什么?

1 个答案:

答案 0 :(得分:4)

默认field_one未被调用,您在方法中设置了名为field_one的本地变量。

如果您想明确表示要在该类中调用field_one方法,则必须在其前面添加self