如何在视图之外使用rails jbuilder

时间:2013-12-05 16:36:00

标签: ruby ruby-on-rails-3

在视图之外使用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\"

1 个答案:

答案 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)。