我正在尝试缓存以下内容:
<% @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
块传递到缓存?
与
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
一切都应该有效。
或者更好的是,为了清楚起见,添加括号。