🐷

【Rails】同データの場合、touchメソッドでupdated_atのみを更新する

2022/05/03に公開

概要

  • 定期的にデータを抽出してレコードの更新を行うタスクを設定していたが、同データだとupdated_atすら更新されないことが判明。
    • この状態だと、同データだから更新がされていないのか、そもそも更新処理が失敗しているのか分からない状態。

解決策

  • changed?(カラム名_changed?)メソッドでデータ変更の有無を判定
    • 変更があれば普通にupdate処理
    • 同データの場合、touchメソッドでupdated_atのみを更新する
解決策
data = ◯◯◯◯ # 抽出処理
target = Target.find(1) # レコード指定
target.data = data # 代入

# 更新
# dataが変更されていない場合はupdate_atのみ更新。(同データだとupdated_atすら更新されず、処理が走ったかどうかわからないため)
target.data_changed? ? target.update(data: @data_json) : target.touch

Discussion