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
相关产品推荐
相关产品推荐

