rails every_with_index 缓存

问题描述 投票:0回答:1

我正在尝试缓存以下内容:

<% @equipment.sports.zip(@equipment.sport_equipments).each_with_index do |(sport, equipment), index| %>
   <% cache[cache_version_tool, equipment.cache_key, sport.cache_key, index] do %>
      <%= render 'sport', sport: sport, equipment: equipment, cached: true %>
   <% end %>
<% end %>

该块在没有缓存的情况下工作正常,但是当我拥有它时,我收到:

ActionView::Template::Error (no block given (yield)):

如何将

each_with_index
块传递到缓存?

ruby-on-rails caching activerecord actionview
1个回答
0
投票

each_with_index
无关。您调用的缓存方法是错误的。

您的呼唤

cache[cache_version_tool, equipment.cache_key, sport.cache_key, index] do

翻译为

cache().[](cache_version_tool, equipment.cache_key, sport.cache_key, index) do

cache()
不接收任何参数,也不接收块。在它内部检查不带参数的缓存(显然不存在),然后调用
yield
。由于
cache()
没有收到块(
[]
访问收到了),因此它会引发
no block given (yield)
错误。

cache
[

之间添加一个空格
cache [cache_version_tool, equipment.cache_key, sport.cache_key, index] do

现在它被解释为

cache([cache_version_tool, equipment.cache_key, sport.cache_key, index]) do

一切都应该有效。

或者更好的是,为了清楚起见,添加括号。

© www.soinside.com 2019 - 2024. All rights reserved.