Как определить, изменилось ли какое-либо поле в модели / вложенной модели? - PullRequest
40 голосов
/ 11 апреля 2011

Есть ли какой-нибудь быстрый способ узнать, изменились ли какие-либо поля модели или какие-либо поля ее вложенных моделей (или ассоциаций)?

Ответы [ 4 ]

75 голосов
/ 11 апреля 2011

Чтобы узнать, изменился ли объект ActiveRecord, вы можете вызвать:

instance.changed?

Чтобы увидеть, был ли изменен определенный атрибут, вы можете сделать:

instance.attr_changed?

где attr - атрибут, который вы хотите проверить.

Чтобы проверить, изменилась ли вложенная модель, вы можете просто сделать:

instance.nested_model.changed?
6 голосов
/ 26 февраля 2016

Я знаю, что это старый вопрос, но недавно столкнулся с такой же ситуацией.

Вы можете получить все изменения для вашей вложенной модели, используя метод previous_changes, даже после сохранения объекта.

parent_model_object.nested_model_name.previous_changes

Это перечислит все изменения во вложенной модели вместе со старым и новым значением.

3 голосов
/ 11 апреля 2011

Вы можете определить, был ли объект изменен, но еще не сохранен, вызвав:

my_object.changed?

Вы также можете определить, изменились ли отдельные атрибуты (скажем, у вас есть атрибут first_name):

my_object.first_name_changed?

Что касается вложенных моделей, я думаю, вам придется вызывать changed? для каждого из них по отдельности.

1 голос
/ 08 декабря 2018

с 5.1 + у меня работает следующее:

saved_changes? сообщит вам, изменился ли ваш объект:

my_object.saved_changes?
=> true

saved_changes сообщит, какие поля были изменены, значения до и после для каждого поля:

my_object.saved_changes
=> {"first_name"=>['Jim', 'Jimmy'], "updated_at"=>[Thu, 06 Dec 2018 18:45:00 UTC +00:00, Thu, 06 Dec 2018 18:52:44 UTC +00:00]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...