Ruby on Rails: использование оператора лопатой для обновления строкового атрибута в модели не делает модель грязной - PullRequest
5 голосов
/ 09 ноября 2010

Мы столкнулись с интересной проблемой сегодня. Кажется, что если вы используете оператор совка для объединения строкового атрибута в модели ActiveRecord, это не делает модель грязной. Например:

e = Employee.first
e.name << "asdf"
e.name_changed? # returns false
e.changed? # returns false

Это имеет смысл, так как оператор лопатки обновляет строку, не копируя ее, где оператор + = создаст копию строки. Я не понимаю, как ActiveRecord мог знать, что что-то изменилось, если вы используете оператор лопатой.

Кто-нибудь еще видел это? Является ли решение просто использовать += вместо << при объединении строк?

1 Ответ

5 голосов
/ 09 ноября 2010

Решение было, что вы пишете.

Или вы можете пометить до этого ваш attibute will_change

e = Employee.first
e.name_will_change!
e.name << "asdf"
e.name_changed? # => true

Это отметка в документации API. ActiveModel :: Грязная

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