Photo by Helloquence on Unsplash

Railsのドキュメントを修正して、未来のバグを撲滅する

Tatsuya Tobioka
Ruffnote
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 をつけることで、想定通りモデルの更新とともにキャッシュが破棄されるようになりました。

めでたしめでたし。

--

--