ActiveRecordの変更有無や変更前後の値
September 11, 2017
Rails5.1から、ActiveRecord::AttributeMethods::Dirtyが変更されている。
従来の方法と新しい方法の比較
従来の方法は、利用可能だが、非推奨となっている。
新しい方法では、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) |