Przed szynami 5.1
Dołączenie _was
do twojego atrybutu da ci poprzednią wartość.
Do szyn 5.1+
Skopiowano z odpowiedzi Lucasa Andrade'a poniżej : https://stackoverflow.com/a/50973808/9359123
Dołączanie _was
jest przestarzałe w railsach 5.1, teraz powinieneś dołączyć_before_last_save
Coś jak:
before_save object
do_something_with object.name_before_last_save
end
Zwróci wartość nazwy przed ostatnim zapisem w bazie danych (działa przy zapisywaniu i tworzeniu)
Różnica między _was
i _before_last_save
zgodnie z dokumentacją:
_był źródłem z docs
def attribute_was(attr)
attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end
_before_last_save źródło z dokumentów
def attribute_before_last_save(attr_name)
mutations_before_last_save.original_value(attr_name)
end
self.context
:self.context_was
_was
.Do szyn 5.1+
Dołączanie
_was
jest przestarzałe w railsach 5.1, teraz powinieneś dołączyć_before_last_save
Coś jak:
Zwróci wartość nazwy przed ostatnim zapisem w bazie danych (działa przy zapisywaniu i tworzeniu)
Różnica między
_was
i_before_last_save
zgodnie z dokumentacją:_był źródłem z docs
_before_last_save źródło z dokumentów
Można zobaczyć lepszy przykład tutaj
źródło
attribute_was
został uznany za przestarzały na korzyśćattribute_in_database
, podczas gdyattribute_before_last_save
jest to zupełnie nowa metoda od 5.1, która nie ma odpowiednika we wcześniejszych wersjach Railsów. Źródło: github.com/rails/rails/pull/25337#issuecomment-225166796attributes_before_type_cast
Metoda ActiveRecord zwraca wartość skrótu atrybutów przed rzutowaniem typów i deserializacją.źródło
Zajrzyj do dokumentacji railsów
http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
Model.attribute_was zwrócił poprzednią wartość: D
źródło