我正在尝试在Rails中对我的产品进行分段缓存,但发现它一旦缓存就不会切换货币。我通过会话变量session[:currency] = "USD"
设置当前货币。
在此示例中,一旦用户使用此方法切换其货币,它将无法显示<%= Money.new(p.price, "EUR").exchange_to("GBP") %>
。
<% Product.all.each do |p| %>
<% cache(p) do %>
<%= link_to p.name, product_url(p) %>
<%= Money.new(p.price, "EUR").exchange_to(session[:currency]) %>
<% end %>
<% end %>
我如何让rails缓存不同的Money
对象,仍然使用exchange_to
?
谢谢!
答案 0 :(得分:1)
您只需将货币添加到缓存密钥即可。这允许Rails为每种货币缓存一个版本:
<% Product.all.each do |p| %>
<% cache [p, session[:currency]] do %>
<%= link_to p.name, product_url(p) %>
<%= Money.new(p.price, "EUR").exchange_to(session[:currency]) %>
<% end %>
<% end %>
有关依赖多个来源的密钥,请参阅the docs。