コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

ActiveRecordの内容に変化はないが、updated_atだけ更新したい場合はtouchを使用する

簡易な記録テーブルなどで、時刻などを更新をしたいときの豆知識

環境

$ rails -v
Rails 7.1.2

やり方

該当レコードで .touch をすると自動的に保存がされる

book.updated_at
# Thu, 01 Feb 2024 14:37:18.696490000 UTC +00:00

このようなレコードに .touch をすると現在時刻が入る。

book.touch
# true
book.updated_at
# Thu, 01 Feb 2024 14:37:37.490409000 UTC +00:00

応用編

任意の時間を設定することもできる。

book.touch(time: Time.new(2015, 2, 16, 0, 0, 0))
book.updated_at
# Sun, 01 Feb 2015 00:00:00.000000000 UTC +00:00

注意点

GitHubの該当コード部分 にも書いてあるが、特定のバリデーションは省略され、特定のコールバックしか動かないので注意

Please note that no validation is performed and only the +after_touch, +after_commit and +after_rollback callbacks are executed.

関連リンク