class CacheKeys
def self.snips_index(member:, params:)
parts = {
member_id: member&.id,
q: params[:q].to_s,
tag: params[:tag].to_s,
page: params[:page].to_s
}
"snips:index:v2:#{Digest::SHA1.hexdigest(parts.to_json)}"
end
end
key = CacheKeys.snips_index(member: current_member, params: params)
@snips = Rails.cache.fetch(key, expires_in: 2.minutes) do
Snip.by_active.page(params[:page])
end
When caching lists, include inputs that change the list (filters, page, member permissions). A deterministic cache key function prevents subtle “wrong user saw wrong list” bugs.