问题
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