Overriding instance method in Rails [duplicate]

痴心易碎 提交于 2019-12-08 06:32:01

问题


While overriding some assignment methods, I discovered that if I use the implicit receiver in the field_two method, the first overridden method, field_one, doesn't get called. Instead, the default 'field_one=' seems to be called.

#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

However, if I change the receiver to be explicit, my overridden method gets called:

def field_two=(value)
  self.field_one="whatever"
  write_attribute(:field_g_one,value)
end  

What is going on here?


回答1:


The default field_one isn't getting called, you're setting a local variable called field_one inside the method.

If you want to make it explicit that you want to call the field_one method inside that class, you must prefix it with self.



来源:https://stackoverflow.com/questions/24502606/overriding-instance-method-in-rails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!