Railsのドキュメントを修正して、未来のバグを撲滅する
Published in
3 min readDec 12, 2018
以前、以下のような記事を書きました。
Rails 5.2以降は cache_key
がデフォルトでタイムスタンプを返さなくなるため、対応しないと「モデルをtouchしても更新されない」というバグが発生する可能性があります。
前回は、
ちゃんとリリースノートに書いてあったというオチでした。
と締めくくったのですが、その後Railsのガイドを見ているとRails 5.1以前の仕様を元にした記載が残っていました。
class Product < ApplicationRecord
def competing_price
Rails.cache.fetch("#{cache_key}/competing_price", expires_in: 12.hours) do
Competitor::API.find_price(id)
end
end
end
このまま書くとcompeting_priceがずっと更新されなくて初心者が困るぞ…!
というわけで以下のように修正するプルリクエストを送り、無事マージされました。
※ すぐマージされると思って気軽に送りましたが、意外とちゃんと見られて何度が修正した上で、こうなりました。
class Product < ApplicationRecord
def competing_price
Rails.cache.fetch("#{cache_key_with_version}/competing_price", expires_in: 12.hours) do
Competitor::API.find_price(id)
end
end
end
_with_version
をつけることで、想定通りモデルの更新とともにキャッシュが破棄されるようになりました。
めでたしめでたし。