Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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]}