Переопределение метода экземпляра в 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  

Что здесь происходит?

1 ответ

Решение

По умолчанию field_one не вызывается, вы устанавливаете локальную переменную с именем field_one внутри метода.

Если вы хотите сделать явным, что вы хотите вызвать field_one метод внутри этого класса, вы должны префикс его self,

Другие вопросы по тегам