Как заставить запись сохранить себя, даже если я не изменил никаких атрибутов - PullRequest
13 голосов
/ 31 октября 2009

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

, операция обновления не происходит.
User.first.save

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

Ответы [ 4 ]

24 голосов
/ 31 октября 2009

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

В качестве альтернативы отключите частичные_обновления: ActiveRecord::Base.partial_updates = false

16 голосов
/ 28 июля 2011

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

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

2 голосов
/ 31 мая 2012

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

Правда, в последних Rails он больше не вызывает традиционные обратные вызовы, о чем упоминал Джош Рикард . Но он вызывает обратный вызов after_touch .

См. Внизу этой страницы:

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

1 голос
/ 31 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...