よく使う割に忘れてしまうので、メモしておく。
前提
- Rails 6.1.7
- レコードを更新する際に、変更内容をログ出す時に使うこと多い
新しいレコードか
# 保存前
user.new_record?
=> true
# 保存後(id値は変更されない前提)
user.id_before_last_save.nil?
=> true
オブジェクトが更新されたか
# 保存前
user.has_changes_to_save?
=> true
# 保存後
user.saved_changes?
=> true
どの属性が更新されたか
# 保存前
user.changed_attribute_names_to_save
=> ["name"]
# 保存後
user.saved_changes.keys
=> ["name"]
ある属性が更新されたか
# 保存前
user.will_save_change_to_name?
=> true
# 保存後
user.saved_change_to_name?
=> true
ある属性の更新前の値は何か
# 保存前
user.name_in_database
=> "foo"
# 保存後
user.name_before_last_save
=> "foo"
ある属性がどのように更新されたか
# 保存前
user.changes_to_save
=> {"name"=>["foo", "bar"]}
# 保存後
user.saved_changes
=> {"name"=>["foo", "bar"]}