在视图之外使用jbuilder片段缓存是否可能?
我试图通过以下方式使用jbuilder进行缓存:
Jbuilder.encode do |json|
json.cache! ['v1', @people], expires_in: 10.minutes do
json.array! @people do |person|
json.id person.id
json.name person.name
end
end
end
Json输出conatins实际上是“缓存!”而不是做缓存。
输出示例:
"{\"version\":1,\"people\":{\"cache!\":[[{\"id\":1,\"name\"
答案 0 :(得分:3)
是的,这是可能的但并非如此简单,因为cache!
和array!
都在JbuilderTemplate中定义,需要视图上下文。您可以在Rails控制器中使用JbuilderTemplate
,如下所示:
template = JbuilderTemplate.encode(view_context) do |json|
json.cache! ['v1', @people], expires_in: 10.minutes do
json.array! @people do |person|
json.id person.id
json.name person.name
end
end
end
设置view_context
非常重要。在控制器之外,最好使用Rails.cache.fetch
(事实上,这正是Jbuilder does)。