Получать измененные атрибуты при обратном вызове after_update
Я пытаюсь сделать условное after_update, у меня есть следующее:
after_update do |participant|
Rails.logger.info "#{self.previous_changes} changed."
if self.previous_changes.include?(:current_distance)
#Do my stuff ...
end
end
Регистратор печатает пустой хеш: {}
Как проверить, какой атрибут был изменен?
Я использую: participant.update_attribute(:current_distance, distance)
для обновления атрибута.
Ответы
Ответ 1
Вы хотите использовать changes
not previous_changes
. Вы по-прежнему находитесь в одной транзакции сохранения, так что вы ищете в changes
. previous_changes
не будет иметь информацию до тех пор, пока обновление не завершится.
RAILS 5.1.1:
используйте saved_changes
вместо changes
, поскольку он будет устаревать в новых версиях.