如何使用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
相关产品推荐
相关产品推荐

