概要
mongoidには特定のインスタンスのtimestampを更新したくない時に、timestampだけ更新しないようにする仕組みがあります。
私は実務でActive Recordを使ったことがないので定かではないですが、Active Recordにも必ずあるはずです。
そのオプションを付与するメソッドはそのオプションを解除するメソッドとセットで実行していくのですが...
そのオプション解除メソッドを実行しても、timestampが更新されない状態が継続されるので、バグか?と思ったので本稿にメモとして記録しておきます。
具体的な挙動
検証バージョン
mongoid 5.4.0
mongodb 3.2
# 公式Documentにはuser.timeless.saveみたいな例があるが、その場合は、user.reloadを後続処理で入れないとtimestampの値がfreezeされなそう…(これもバグ?) $ user = user.timeless # updated_atが更新される $ user.update(email: "hoge@hoge.com") => true # こうするとtimestampの更新が行われなくなる $ user = user.timeless $ user.update(email: "hoge@hoge.com") => true # しかし... # 本来は user.clear_timeless_optionをすると解除されるはず... $ user.clear_timeless_option => true # ここでtimestampに関わる値が更新されなかった... $ user.update(email: "hoge@hoge.com") => true
最後に
いずれ時間を作って、今回メモしたバグを解消するプルリクを送ってみたいと思います。
頑張るぞ!