Sen kontrol etmek için bir kaç şey yapabilirim ...
Her şeyden önce, aşağıdaki gibi bir birey niteliği kontrol edebilirsiniz: Ayrıca değişti hangi nitelikleri kontrol edebilirsiniz,
user = User.find(1)
user.name_changed? # => false
user.name = "Bob"
user.name_changed? # => true
Ama tüm model:
user = User.find(1)
user.changed # => []
user.name = "Bob"
user.age = 42
user.changed # => ['name', 'age']
siz de yapabileceğiniz birkaç şey daha var - ayrıntılar için http://api.rubyonrails.org/classes/ActiveModel/Dirty.html göz atın.
Düzenleme: Bu bir after_commit
geri aramasında bir gerçek olduğuna göre
Ama, model zaten kaybolur kaydetmeden önce gerçekleşen değişikliklerin bilgisine anlamına kaydedildi. Değişiklikleri kendiniz bulmak için before_save
geri aramayı kullanmayı deneyebilir, bunları bir yerde saklayabilir ve ardından after_commit
'u kullanırken tekrar erişebilirsiniz.
Ama bu iş after_commit yapar veya yalnızca önce kaydetmek? – AnApprentice
Doğru, özür dilerim, o kısmı kaçırdı. Modeli kaydettikten sonra, değiştirilen öznitelikleri silinir, bu nedenle oldukça işe yaramaz olur ... Örneğin, 'before_save' kullanarak değiştirilen öznitelikleri kendiniz saklayabilir ve daha sonra bunları alabilir misiniz? – BaronVonBraun
'değiştirildi?'/'Changes' ** after_save ** içinde çalışacak, ancak ** after_commit ** olacak. Bunun yerine, 'before_commit ** 'deki previous_changes öğesini kullanabilirsiniz - bkz. @ Jonathan'ın [yanıtı] (http://stackoverflow.com/a/16823712/165673) – Yarin