Für alle, die dies später sehen, da es derzeit (August 2017) über Google steht: Es ist erwähnenswert, dass dieses Verhalten in Rails 5.2 geändert wird und ab Rails 5.1 Verfallswarnungen enthält , da sich ActiveModel :: Dirty etwas geändert hat .
Was ändere ich?
Wenn Sie die attribute_changed?
Methode in den after_*
Rückrufen verwenden, wird eine Warnung wie folgt angezeigt:
DEPRECATION WARNING: Das Verhalten von attribute_changed?
Inside-After-Callbacks wird sich in der nächsten Version von Rails ändern. Der neue Rückgabewert spiegelt das Verhalten beim Aufrufen der Methode nach der Rückgabe wider save
(z. B. das Gegenteil von dem, was sie jetzt zurückgibt). Verwenden Sie saved_change_to_attribute?
stattdessen, um das aktuelle Verhalten beizubehalten . (wird von some_callback unter /PATH_TO/app/models/user.rb:15 aufgerufen)
Wie bereits erwähnt, können Sie dies leicht beheben, indem Sie die Funktion durch ersetzen saved_change_to_attribute?
. So zum Beispiel name_changed?
wird saved_change_to_name?
.
Wenn Sie die verwenden attribute_change
, um die Vorher-Nachher-Werte abzurufen, ändert sich dies ebenfalls und löst Folgendes aus:
DEPRECATION WARNING: Das Verhalten von attribute_change
Inside-After-Callbacks wird sich in der nächsten Version von Rails ändern. Der neue Rückgabewert spiegelt das Verhalten beim Aufrufen der Methode nach der Rückgabe wider save
(z. B. das Gegenteil von dem, was sie jetzt zurückgibt). Verwenden Sie saved_change_to_attribute
stattdessen, um das aktuelle Verhalten beizubehalten . (wird von some_callback unter /PATH_TO/app/models/user.rb:20 aufgerufen)
Wie bereits erwähnt, ändert die Methode den Namen, zu saved_change_to_attribute
dem sie zurückkehrt ["old", "new"]
. oder use saved_changes
, das alle Änderungen zurückgibt und auf die als zugegriffen werden kann saved_changes['attribute']
.