Есть ли какой-нибудь быстрый способ узнать, изменилось ли какое-либо из полей модели или каких-либо полей его вложенных моделей (ассоциации a.k.a.)?
Как определить, изменилось ли какое-либо поле в модели/вложенной модели?
Ответ 1
Чтобы узнать, изменился ли объект ActiveRecord, вы можете вызвать:
instance.changed?
Чтобы узнать, был ли изменен конкретный атрибут, вы можете:
instance.attr_changed?
где attr - атрибут, который вы хотите проверить.
Чтобы проверить, изменилась ли вложенная модель, вы можете просто:
instance.nested_model.changed?
Ответ 2
Я знаю, что это старый вопрос, но недавно столкнулся с той же ситуацией.
Вы можете получить все изменения для вашей вложенной модели с помощью метода previous_changes
даже после сохранения объекта.
parent_model_object.nested_model_name.previous_changes
Здесь будут перечислены все изменения вложенной модели вместе со старым и новым значением.
Ответ 3
Вы можете определить, был ли объект изменен, но еще не был сохранен, вызвав:
my_object.changed?
Вы также можете определить, изменились ли отдельные атрибуты (например, у вас есть атрибут first_name
):
my_object.first_name_changed?
Что касается вложенных моделей, я думаю, вам придется называть changed?
на них каждый отдельно.
Ответ 4
с 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]}