Para quem vê isso mais tarde, como atualmente (agosto de 2017) supera o google: vale a pena mencionar, que esse comportamento será alterado no Rails 5.2 e possui avisos de descontinuação no Rails 5.1, pois o ActiveModel :: Dirty mudou um pouco .
O que eu mudo?
Se você estiver usando o attribute_changed?
método nos after_*
callbacks, verá um aviso como:
AVISO DE DEPRECAÇÃO: O comportamento de attribute_changed?
dentro de após retornos de chamada será alterado na próxima versão do Rails. O novo valor de retorno refletirá o comportamento de chamar o método depois de save
retornado (por exemplo, o oposto do que ele retorna agora). Para manter o comportamento atual, use em seu saved_change_to_attribute?
lugar. (chamado de some_callback em /PATH_TO/app/models/user.rb:15)
Como ele menciona, você pode corrigir isso facilmente, substituindo a função por saved_change_to_attribute?
. Então, por exemplo, name_changed?
torna-se saved_change_to_name?
.
Da mesma forma, se você estiver usando o attribute_change
para obter os valores antes e depois, isso também muda e gera o seguinte:
AVISO DE DEPRECAÇÃO: O comportamento de attribute_change
dentro de após retornos de chamada será alterado na próxima versão do Rails. O novo valor de retorno refletirá o comportamento de chamar o método depois de save
retornado (por exemplo, o oposto do que ele retorna agora). Para manter o comportamento atual, use em seu saved_change_to_attribute
lugar. (chamado de some_callback em /PATH_TO/app/models/user.rb:20)
Novamente, como mencionado, o método altera o nome para o saved_change_to_attribute
qual retorna ["old", "new"]
. ou use saved_changes
, que retorna todas as alterações, e essas podem ser acessadas como saved_changes['attribute']
.