search
LoginSignup
0

posted at

updated at

ActiveRecord で作成・更新状態を確認するメソッド

よく使う割に忘れてしまうので、メモしておく。

前提

  • 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"]}

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0