1

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?

kempchee
  • 470
  • 1
  • 4
  • 17

1 Answers1

4

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.

sevenseacat
  • 24,699
  • 6
  • 63
  • 88