Bagi siapa pun yang melihat ini nanti, seperti saat ini (Agustus 2017) teratas di google: Perlu disebutkan, bahwa perilaku ini akan diubah dalam Rails 5.2 , dan memiliki peringatan penghentian pada Rails 5.1, seperti ActiveModel :: Dirty berubah sedikit .
Apa yang saya ubah?
Jika Anda menggunakan attribute_changed?
metode di after_*
-callbacks, Anda akan melihat peringatan seperti:
PERINGATAN DEPRECASI: Perilaku attribute_changed?
dalam setelah panggilan balik akan berubah di versi Rails berikutnya. Nilai pengembalian baru akan mencerminkan perilaku memanggil metode setelahsave
kembali (misalnya kebalikan dari apa yang dikembalikan sekarang). Untuk mempertahankan perilaku saat ini, gunakan saved_change_to_attribute?
saja. (dipanggil dari some_callback di /PATH_TO/app/models/user.rb:15)
Seperti yang disebutkan, Anda dapat memperbaikinya dengan mudah dengan mengganti fungsinya saved_change_to_attribute?
. Jadi misalnya, name_changed?
menjadi saved_change_to_name?
.
Demikian juga, jika Anda menggunakan attribute_change
untuk mendapatkan nilai sebelum-sesudah, ini juga berubah dan melempar yang berikut:
PERINGATAN DEPRECASI: Perilaku attribute_change
dalam setelah panggilan balik akan berubah di versi Rails berikutnya. Nilai pengembalian baru akan mencerminkan perilaku memanggil metode setelahsave
kembali (misalnya kebalikan dari apa yang dikembalikan sekarang). Untuk mempertahankan perilaku saat ini, gunakan saved_change_to_attribute
saja. (dipanggil dari some_callback di /PATH_TO/app/models/user.rb:20)
Sekali lagi, seperti yang disebutkan, metode ini mengubah nama saved_change_to_attribute
yang kembali ["old", "new"]
. atau gunakan saved_changes
, yang mengembalikan semua perubahan, dan ini dapat diakses sebagai saved_changes['attribute']
.