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したほうが スマートなんちゃうんと思いました。。。