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

Rails中如何在Order的JSON响应中嵌套OrderItem与关联Product?

如何在Rails的JSON响应中嵌套多层关联数据?

你已经搭好了Order、OrderItem和Product的关联关系,当前控制器的index方法只能返回包含order_items的订单数据,但想要让每个order_item里再带上关联的product信息,其实调整一下render方法的include参数就能轻松搞定!

修改控制器代码

只需要把include参数改成嵌套形式,明确指定要包含order_items以及每个order_item对应的product:

def index
  orders = Order.where(nil)
  render json: { orders: orders }, include: { order_items: :product }, status: :ok
end

你也可以用数组写法,效果完全一致:

render json: { orders: orders }, include: ['order_items', 'order_items.product'], status: :ok

效果说明

修改后,Rails序列化订单数据时会自动把每个order_item关联的product信息嵌套进去,返回的JSON结构就和你想要的完全匹配:

{
  "orders": [
    {
      "id": 2,
      "order_items": [
        {
          "id": 1,
          "product": {
            "name": "abc"
            // 默认会返回Product模型的所有字段,如需限制可额外配置
          }
        }
      ]
    }
  ]
}

如果之后需要自定义返回字段(比如只保留product的name),可以用only参数过滤:

render json: { orders: orders }, 
       include: { 
         order_items: { 
           include: { 
             product: { only: [:name] } 
           } 
         } 
       }, 
       status: :ok

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:51