Rails Fragment Caching on Product + Money gem exchange_to Rate

时间:2015-11-19 02:07:10

标签: ruby-on-rails ruby caching

我正在尝试在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

谢谢!

1 个答案:

答案 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