ActiveRecordのupdated_at、created_atを自動更新しない方法
railsのモデル(ActiveRecord)にはtimestamps(updated_atとcreated_at)というフィールドがあって、更新日時、生成日時が勝手に記録されて便利ですね。
でも特定のタイミングでこの自動更新(特にupdated_at)を止めたい場合があります。
そんな時にはActiveRecord::Baseのrecord_timestampsをfalseにするといいみたいです。
例えば、僕の場合:
・CMSみたいな仕組みを作っている
・ページの中身を入れておくPageというモデルがあった。
・このモデルにアクセスカウンター(pages.counter)用のフィールドあり。
・アクセスカウンターは/pages/showが呼ばれる度にpages.counterを+1する仕組み
・ということは/pages/showが呼ばれる度にupdated_atが更新される
・/pages/indexではページの内容が更新された順に並べたい
・updated_at DESCでソートしても「最近閲覧されたページ順」になってしまう
・アクセスカウンターの処理ではupdated_atは更新してくれるな!
というわけで
Page.record_timestamps = false page.count_up Page.record_timestamps = true
という感じのコードになりました。