You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jbuilder在Rails中嵌套展示父级OD及子级OD_items信息

嘿,我来帮你优化这个Jbuilder的写法!你现在的代码其实能生成嵌套结构,但可能结构有点冗余——每个od节点里多了一层od包裹,od_items里也多了od_item包裹,通常我们想要更扁平直观的结构。

方案一:精准控制输出字段(推荐)

这种方式可以只返回你需要的属性,避免暴露不必要的数据库字段,性能也更好:

json.ods @sophead.ods do |od|
  # 列出你需要展示的od属性,替换成实际业务需要的字段
  json.extract! od, :id, :sophead_id, :status, :created_at
  
  # 嵌套od_items,同样指定需要的属性
  json.od_items od.od_items do |od_item|
    json.extract! od_item, :id, :od_id, :product_name, :quantity, :price
  end
end

方案二:输出完整对象(快速实现)

如果确实需要返回模型的所有属性,可以用merge!直接合并对象的属性,简化代码:

json.ods @sophead.ods do |od|
  # 合并od的所有数据库属性
  json.merge! od.attributes
  
  # 嵌套od_items的完整属性
  json.od_items od.od_items do |od_item|
    json.merge! od_item.attributes
  end
end

两种方案的输出对比

你当前代码的输出结构是这样的(冗余嵌套):

{
"ods": [
{
"od": { "id": 51, "sophead_id": 386, ... },
"od_items": [
{ "od_item": { "id": 123, ... } }
]
}
]
}

优化后的输出结构会更简洁(直接包含属性):

{
"ods": [
{
"id": 51,
"sophead_id": 386,
...,
"od_items": [
{ "id": 123, "od_id": 51, ... }
]
}
]
}

根据你的实际需求选就行啦!

内容的提问来源于stack exchange,提问作者daveanderson88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:18:47