有没有办法在辅助方法中缓存字符串片段?

时间:2013-07-09 00:06:51

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我有一个助手,可以为引擎中的常见组件生成复杂的HTML。

助手(非常简化):

def component(name)
  component = Component.find_by_name!(name)
  # a whole lot of complex stuff that uses component to build some HTML
end

查看:

<%= component(:my_component) %>

我想在这些组件上实现片段缓存,但我想在#component本身内进行,以保持干燥,例如。

def component(name)
  ...

  cache some_unique_fragment_name do
    html
  end

  # or, more succinctly:
  cache(some_unique_fragment_name, html)
end

问题是Rails'cache帮助器期望它将在Erb中包装一块HTML,因此不会像我上面所描述的那样工作。

有没有办法在辅助方法中使用#cache字符串片段?

1 个答案:

答案 0 :(得分:2)

我是fetch区块的忠实粉丝,您可以在Rails docs中阅读更多内容:

def component(name)
  # ...

  cache.fetch('some_unique_fragment_name') do
    html
  end
end

这样做会返回some_unique_fragment_name的值,如果它可用,否则它将在块内生成它。这是一种可读,干净的方式,表明正在进行缓存。