lambda consulting

ActiveRecordの変更有無や変更前後の値

September 11, 2017

Rails5.1から、ActiveRecord::AttributeMethods::Dirtyが変更されている。

Rails

従来の方法と新しい方法の比較

従来の方法は、利用可能だが、非推奨となっている。
新しい方法では、DBへのcreate/updateの前後で、使用するメソッドが異なる。

user = User.find(1)
user.name            #=> "foo"
user.name = "bar"
従来 返り値 after_create/after_update より前 after_create/after_update より後
user.name_changed? true user.will_save_change_to_name? user.saved_change_to_name?
user.name_change [“foo”, “bar”] user.name_change_to_be_saved user.saved_change_to_name
user.name_was “foo” user.name_in_database user.name_before_last_save
user.changes {“name”=>[“foo”, “bar”]} user.changes_to_save user.saved_changes
user.changed? true user.has_changes_to_save? user.saved_changes?
user.changed [“name”] user.changed_attribute_names_to_save user.saved_changes.keys
user.changed_attributes {“name”=>”foo”} user.attributes_in_database user.saved_changes.transform _values(&:first)