我试图获取所有数据,包括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可以提供帮助。感谢
答案 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