如何在 jbuilder 中将一个部分渲染两次?

Posted

技术标签:

【中文标题】如何在 jbuilder 中将一个部分渲染两次?【英文标题】:How can I render one partial twice in jbuilder? 【发布时间】:2015-01-30 10:33:30 【问题描述】:

我想像这样渲染一个 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】:

将一个局部渲染两次似乎很浪费,我可以这样渲染吗?

如果您关心的是最小化代码,那么可以,您可以使用procs。

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

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

Partial 包含大量计算,这些计算平均比访问缓存更昂贵。例如 WEB API 调用或 AR 查询

生成的 JSON blob 的大小很小

查看更多信息 [Jbuilder Rails caching is slower]

【讨论】:

以上是关于如何在 jbuilder 中将一个部分渲染两次?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Rails 找不到我的 jbuilder 模板或不渲染它?

Jbuilder 部分缓存未添加到输出中

React:如何在页面中两次渲染组件?

如何在 Jbuilder 和 Normalizr 之间展平数据

django如何两次渲染相同的模板[重复]

在 html 视图中呈现 JBuilder 视图