如何在jbuilder中渲染一次?

时间:2014-12-02 08:33:40

标签: ruby-on-rails jbuilder

我想渲染一个像这样的jbuilder模板:

json.author do
  json.partial! 'user', user: @user
end
json.owner do
  json.partial! 'user', user: @user
end

将部分渲染两次似乎是浪费,我可以这样渲染吗?

user_json = json.some_render_partial! 'user', user: @user
json.author { user_json }
json.owner { user_json }

1 个答案:

答案 0 :(得分:5)

  

将部分渲染两次似乎是浪费,我可以这样渲染吗?

如果您关注的是最小化代码,那么可以使用proc s。

user_json = proc { json.partial! 'user', user: @user }

json.author &user_json
json.owner &user_json

此外,如果您的关注是提升性能,那么一种方法是缓存您的部分。试试这个

user_json = proc {
  json.cache! @user, expires_in: 10.minutes do
    json.partial! 'user', user: @user
  end
}

json.author &user_json
json.owner &user_json

但是,有时缓存可能会变慢。因此,请记住它是否符合以下条件:

  • 部分包含大量计算,平均比访问缓存更昂贵。像WEB API调用或AR查询

  • 生成的JSON blob的大小很小

有关详情[Jbuilder Rails caching is slower]

,请参阅此处