如何使用包含在rails 5.0活动记录上

时间:2016-11-06 08:56:01

标签: ruby-on-rails ruby

我试图获取所有数据,包括has_many assosoation:

class Order < ApplicationRecord
has_many :order_details

class OrderDetail < ApplicationRecord
belongs_to :order

然后使用以下方法检索数据:

@orders = Order.includes(:order_details)

但输出它只是订单数据:

[
 {
  id: 1,
  customer_id: 4,
  code: "c2306df9",
  date: "2016-09-18T12:13:00.000Z",
  downpayment: 500000,
  amount: 3000000,
  created_at: "2016-11-06T07:44:07.000Z",
  updated_at: "2016-11-06T07:44:09.000Z"
 }
]

我的期望是数据订单和订单详细信息合并。关于Rails 5.0上的包含有什么问题,还是有其他方法?

可能Sameone可以提供帮助。感谢

2 个答案:

答案 0 :(得分:1)

includes是一种告诉Rails急切加载相关记录以避免N + 1查询的方法。

这并不一定意味着Rails执行JOIN查询,也不一定意味着Rails只执行一个查询。通常Rails会执行两个查询 - 一个用于原始请求,另一个用于一次加载所有关联记录。 Rails决定使用哪种策略,具体取决于关系的类型和原始查询参数。

即使Rails生成JOIN并在一个查询中加载所有记录,输出仍然不包括关联。输出格式取决于输出序列化器的配置方式,Rails默认情况下不会将相关记录包含在输出中。

答案 1 :(得分:0)

可能,你想要达到的目标是:

OrderDetail.joins(:order).map do |order_detail|
  [order_detail.order.attributes, order_detail.attributes]
end