3

我有一个助手可以为引擎中的常见组件生成复杂的 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 的缓存助手希望它会在 Erb 中包装一个 HTML 块,因此不会像我上面描述的那样工作。

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

4

1 回答 1

3

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

def component(name)
  # ...

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

它的作用是返回some_unique_fragment_name它是否可用的值,否则它将在块内生成它。这是一种显示缓存正在发生的可读、清晰的方式。

于 2013-07-09T00:15:09.960 回答