去年は東京でもどっさり雪が降りましたけど、今年はどうでしょう?
雪国育ちの僕としては、大雪を期待してしまいます!
さて、ここ数回の記事で Rails の counter_cache と redis-objects を組み合わせたカウンターを作って紹介してみたのですが、
- Rails4 の counter_cache のカウントを redis-objects でカウントしてみた時の試作コード
- Sidekiq + SidekiqUniqueJobs で前回の試作コードの sync_cache! を非同期にまとめて実行するようにしてみよう
- 「Sidekiq + SidekiqUniqueJobs で前回の試作コードの sync_cache! を非同期にまとめて実行するようにしてみよう」の続編
そもそもは僕が rails console で counter 値をいじってみたら、変更出来てしまったところから始まります。このログの通り...
※以下の動作確認で使ったマイグレーションとモデルついては、記事の最後に乗せてあります。
で、僕は「なんだ変更出来ちゃうのか」と思い込んで使っていたのですが、実はそうでもなくて...
「今度は変更されてない!」となったわけなんですよ。
いったいどういうことなのか、気を取り直して調べてみました。恐らく attribute が readonly になっているような気がするので確認してみます。
ということで belongs_to で :counter_cache 指定した attribute を呼び出すまで、カウント値が入る attribute は readonly にならないようです。最初から readonly にはなっていないんですね。
最初に上書き出来たんで、そのまま上書き出来るものだと思っていたら、途中で動作が変わって「アレ!?」となったので共有しておきます。
以下は動作確認で使ったマイグレーションとモデルです :
それではみなさん、最近はインフルエンザも流行しているようですので、お体にお気をつけて。ご自愛下さい。
菊池