赤き血のイレブン

自分の復習ネタを書いてます。

RailsでDBの更新日だけ変更したい場合の話。〜touchしましょう〜

雑談

本日は平日ですが、J1セカンドステージ 第5節で浦和レッズはと言いますと引き分けでした。 セカンドステージに入り、てっきり勝てなくなりましたが代表戦のためリーグ戦は一時中断なので その間に立てなおして欲しいっす。。

本題

DBの更新日だけ更新せんかいや!

さて、表題の件ですが色々大人の事情があったりするわけで、 該当のレコードのデータに変更がなくても、更新日だけ変更したかったりすることもあるでしょう。。

updated_atに現在日時をぶっこんで、保存してもできますが。。。 もっとスマートにやりたいっす。 そんなときはこれ、 touch メソッドです。

実演

さて、実演です。

[1] pry(main)> hoge = Hoge.take
[2] pry(main)> hoge.touch
   SQL (0.4ms)  UPDATE `hoges` SET `hoges`.`updated_at` = '2015-07-29 14:25:38' WHERE `hoge`.`id` = 1

※クラスについてはフィクションです。

touch するとsaveがいらないんですね、これが。

さらに!

とはいっても、touchだけ使うというよりかは普通にデータの登録・更新の処理をするなかで一部だけ touch するというのが考えられるケースかなと。。。

なので、 changed? と一緒に使ったりするかなと。。 changed? は見たままですが、変更があれば(もしくは新規の場合も)trueで、なければfalseです。 今回の場合、変更がない場合に更新日を変更するので

if hoge.changed?
  hoge.save!
else
  hoge.touch
end

のような感じですかね。。 まぁ、更新日なので、更新しなかったら変更しないので普通なので 変更するに越したことないですが。。。

最後に

と、つらつら書いてきましたが 書いてる途中にupdated_atに現在日時をぶっこんでsaveしたほうが スマートなんちゃうんと思いました。。。