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