在我的json视图中“扩展”外键

时间:2013-11-03 02:38:29

标签: ruby-on-rails json ruby-on-rails-4

我有三个模型,ProductOrderOrderItem。给定Order的实例,您可以通过调用order.order_items获取订单商品列表。每个OrderItem必须只有一个Product对象,由product_id引用。

我想创建一个RESTful API,客户可以询问有关订单的信息,我的服务器将立即“加入”所有数据。而不是让客户使用javascript来迭代每个订单商品,获取产品ID,并向product.json视图发出请求,该请求将返回所请求产品的信息。

我有这样一个product.json视图,但我认为最好是让我更容易使用我的API以及最小化对服务器的请求数量(I但是,没有任何理由支持这种观点。

例如,当您询问有关订单1的信息时,我想要返回的输出看起来像

{ "order_id" : 1,
  "order_items" : [
    {
      "order_item_id" : 1,
      "product" : {
        "name": "Carrots"
      }
    },
    {
      "order_item_id" : 2,
      "product" : {
        "name": "Tuna"
      }
    }
  ]
}

我已在order.json视图

中开始使用此功能
json.(@order, :order_items)

它显示了这个

{ "order_id" : 1,
  "order_items" : [
    {
      "order_item_id" : 1,
      "product_id" : 13
    },
    {
      "order_item_id" : 2,
      "product_id" : 128
    }
  ]
}

这是非常接近的,但我可以添加什么来扩展每个订单商品中的product_id,并将其替换为产品的字段。

如何实现所需的输出?

1 个答案:

答案 0 :(得分:0)

您好,您可以尝试使用to_json方法的:include选项作为以下

order = Order.find(1)
order.to_json( include: { order_items: { include: {:product} } } )

我希望它有所帮助:)