2016-03-03 2 views
0

Я использую камень Sequel для обновления набора данных.Как обновить поле updated_at для набора данных Sequel?

Если вы делаете обновление на экземпляре модели, updated_at метка время обновляется только штраф:

foo = Foo[id: 1] 
foo.update(blah: blah) 

Однако при вызове пакетного обновления на наборе данных, он не обновляет updated_at метки времени для каждого запись.

Foo.where(id: 1).update(blah: blah)

Я смотрел на Sequel docs regarding the timestamps plugin, который я использую в уже мой код, но поля updated_at еще не будет обновляться с помощью пакетного обновления. Может ли кто-нибудь помочь мне в этом вопросе?

ответ

1

Выполнение Foo.where(id: 1).update(blah: blah) выполняет одиночный запрос в базе данных, который не будет запускать крючки уровня экземпляра модели. Вы можете либо обновить каждую запись по отдельности:

Foo.where(id: 1).all{|f| f.update(blah: blah)}

или вы можете переключиться на подход на основе базы данных триггера, например https://github.com/jeremyevans/sequel_postgresql_triggers

0

Там есть функция update_all вы могли бы смотреть. Это активный метод записи, поэтому он должен запускать update_at.

Обновление: хорошо, я только что проверил, и он не срабатывает, вы должны использовать его ответ!

Смежные вопросы