This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the caching category.
Last Updated: 2024-11-23
I have taxons that show all the digital notes I sell in a given category (e.g. "Medicine" or "French"). My website has multiple "stores" (e.g. UK, USA), each on its own domain name, and the products contained within each taxon vary dependent on the store.
I noticed that my caching was derping and displaying the Canadian store's products on my UK website. Here was my original buggy code:
# TaxonController
def show
if stale? @taxon
@products = @taxon.products.order(:name).in_store(current_store)
end
end
The issue here was the @products
variable was dependent on the
current_store
, as you can see in the chained methods above. Because
@products
depends on current_store
, this dependency must also appear in the
cache key, as I demonstrate below:
def show
if stale? [@taxon, current_store]
@products = @taxon.products.order(:name).in_store(current_store)
end
end