2011-08-23 17 views

cevap

10

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.

+0

Ama bu iş after_commit yapar veya yalnızca önce kaydetmek? – AnApprentice

+3

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

+6

'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

19

numaralı telefondan 'u, bir modelin özellik değerlerine kaydedilmeden önce erişmek için numaralı telefonu kullanabilirsiniz.

fazla bilgi için bu yazı bakın: after_commit for an attribute

+1

activerecord havalı, sadece previous_changes bir örnek vardı - http://t.co/yjCLEdDHYH –

+0

Doğru cevap budur. – typeoneerror