activeRecord属性(=データベースからロードされた値)という元の値を取得する方法はありますか?
オブザーバーでこのようなものが欲しい
before_save object
do_something_with object.original_name
end
タスクは、更新時にオブジェクトをハッシュテーブルから削除します(実際には、テーブル内の別のキーにオブジェクトを移動します)。
属性に_was
を追加すると、以前の値が得られます。
ActiveRecordの attributes_before_type_cast
メソッドは、型キャストと逆シリアル化が行われる前に属性のハッシュを返します。
_was
の追加は、Rails 5.1では廃止されました。現在、_before_last_save
を追加する必要があります
何かのようなもの:
before_save object
do_something_with object.name_before_last_save
end
データベースに最後に保存する前に名前の値を返します(保存および作成に機能します)
ドキュメントによると_was
と_before_last_save
の違い:
_ wassource docsから
def attribute_was(attr)
attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end
_ before_last_savesource ドキュメントから
def attribute_before_last_save(attr_name)
mutations_before_last_save.original_value(attr_name)
end
より良い例を見ることができます here
Rails documentation
http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
Model.attribute_wasは前の値を返します:D