1. ホーム
  2. ruby-on-rails

[解決済み] after_saveでレコードが作成されたばかりか、更新されたかを判断する方法

2022-11-17 20:55:16

質問

レコードが保存されたかどうかは、#new_record?関数で判定されます。しかし、それは常にfalseであり after_save フックを使用しています。新しく作成されたレコードなのか、更新による古いレコードなのかを判断する方法はないのでしょうか?

のような別のコールバックを使用しないことを希望しています。 before_create のような別のコールバックを使用して、モデルにフラグを設定したり、データベースに別のクエリを要求したりしないことを望んでいます。

どんなアドバイスでも結構です。

編集:でそれを決定する必要があります。 after_save フックで決定する必要がありますが、私の特定のユースケースには updated_at または updated_on タイムスタンプ

どのように解決するのですか?

私はこれを after_save のコールバックに使おうと思っていました。

よりシンプルな解決策としては id_changed? (で変更されないので)。 update で変更されないため)、あるいは created_at_changed? というように、タイムスタンプのカラムが存在する場合は

更新: @mitsy が指摘しているように、このチェックがコールバックの外で必要な場合は id_previously_changed? . 参照 ドキュメント .