existe uma maneira de obter o valor original de um atributo ActiveRecord (= o valor que foi carregado do banco de dados)?
Eu quero algo assim em um observador
before_save object
do_something_with object.original_name
end
A tarefa é remover o objeto de uma tabela hash (na verdade, movê-lo para outra chave na tabela) durante a atualização.
ruby-on-rails
activerecord
Leonid Shevtsov
fonte
fonte
self.context
:self.context_was
_was
.Para trilhos 5.1+
Anexar
_was
está obsoleto no rails 5.1, agora você deve anexar_before_last_save
Algo como:
Retornará o valor do nome antes de seu último salvamento no banco de dados (funciona para salvar e criar)
A diferença entre
_was
e de_before_last_save
acordo com a documentação:_foi fonte do docs
_before_last_save fonte de documentos
Você pode ver um exemplo melhor aqui
fonte
attribute_was
foi preterido em favor deattribute_in_database
, enquantoattribute_before_last_save
é um método completamente novo a partir do 5.1 que não tem equivalente nas versões anteriores do Rails. Fonte: github.com/rails/rails/pull/25337#issuecomment-225166796O
attributes_before_type_cast
método de ActiveRecord retorna um hash de atributos antes de ocorrer o typecasting e a desserialização.fonte
Dê uma olhada na documentação do Rails
http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
Model.attribute_was retorna o valor anterior: D
fonte