Как заставить запись сохранить себя, даже если я не изменил никаких атрибутов

Чтобы очистить некоторые плохие данные, я добавил перед вызовом сохранения. Теперь мне нужно снова принудительно сохранить все модели. Однако никакая операция обновления не выполняется, если я это делаю

User.first.save

Как заставить все модели выполнять операцию сохранения, даже если у меня нет каких-либо атрибутов.

Ответы

Ответ 1

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

Альтернативно отключить partial_updates: ActiveRecord::Base.partial_updates = false

Ответ 2

Как Джош Рикард прокомментировал принятый ответ, так как Rails 3.0.X touch больше не вызывает проверки и обратные вызовы.

Вы можете, однако, "коснуться" его вручную с помощью model.update_attribute(:updated_at,Time.now) и пропустить проверку и вызвать обратные вызовы таким образом.

Ответ 3

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

Правда, он больше не вызывает традиционные обратные вызовы в последних Rails, как упоминалось Josh Rickard. Но это вызывает срабатывание after_touch.

См. нижнюю часть этой страницы:

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Ответ 4

Если атрибуты не изменены, они не будут сохранены. Если вы что-то изменили во время очистки, оно должно быть сохранено.