📚

Rails で対象のオブジェクトが『新規で保存された直後のレコードかどうか』を判定する

に公開

対象のレコードがまだ新規で保存前かどうかは #new_record? でチェックできます。
まだ保存前であれば true を返し、保存直後は false を返します。

user = User.new(name: "homu")

# 新規で保存前は true を返す
pp user.new_record?
# => true

# 保存後は false を返す

このときに『新規のレコードの保存直後かどうか』を判定したい場合には #previously_new_record? が利用できます。
動きとしては以下のような感じ

# 保存前は false を返す
user = User.new(name: "homu")
pp user.previously_new_record? # => false

# 保存直後であれば true を返す
user.save!
pp user.previously_new_record? # => true

user.assign_attributes(name: "homu")
pp user.previously_new_record? # => true

# 何かしら更新して保存した場合は false になる
user.save!
pp user.previously_new_record? # => false

この判定処理がほしかったので既存のメソッドで判定できてよき。

関連

GitHubで編集を提案

Discussion