我有一个助手,可以为引擎中的常见组件生成复杂的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
字符串片段?
答案 0 :(得分:2)
我是fetch
区块的忠实粉丝,您可以在Rails docs中阅读更多内容:
def component(name)
# ...
cache.fetch('some_unique_fragment_name') do
html
end
end
这样做会返回some_unique_fragment_name
的值,如果它可用,否则它将在块内生成它。这是一种可读,干净的方式,表明正在进行缓存。