Изменение значения атрибута ActiveRecord в хуке before_save - PullRequest
4 голосов
/ 12 марта 2010

Мне нужно было исправить кодировку атрибута ActiveRecord и решил сделать это в ловушке before_save. И в этот момент я заметил неожиданную особенность. Когда я хотел изменить значение атрибута, простое использование attribute_name=XY не сработало, как я ожидал. Вместо этого мне нужно было использовать self[:attribute_name]=XY. До сих пор не распознал это поведение, и я использовал AR.attribute_name=XY. Что является причиной этого? Это поведение относится к крючку или что-то еще? Спасибо за объяснение.

1 Ответ

8 голосов
/ 12 марта 2010

На самом деле это "особенность" Ruby:

def value=(x)
  p x
end

def run
  value = 123
end

run
# => 123

В приведенном выше #run выполнение значения назначает локальную переменную, а не что-либо еще. Если вы хотите вызвать # value =, вы должны указать получателя:

def run
  self.value = 123
end

run
123
# => nil

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...