【发布时间】:2019-11-22 17:07:34
【问题描述】:
为了提高速度,我正在构建一个报告并想要进行查询并返回一个 Hash 数组而不是模型。
sql = Car.joins(:parts).to_sql
# => "SELECT `cars`.* FROM `cars` INNER JOIN `parts` ON `parts`.`car_id` = `cars`.`id`"
results = ActiveRecord::Base.connection.exec_query(sql).to_a
# => [ { id: 1, ...}, { id: 2, ...} ]
这有效,但我如何访问关联?
我想要[{ id: 1, parts: { id: 1, ... } }, { id: 2, parts: { id: 2, ... } } ]之类的东西
我假设由于 ActiveRecord 执行一个查询并且可以提供此数据,因此有一种方法。
【问题讨论】:
-
您必须添加
includes才能访问连接表ActiveRecord::Base.connection.exec_query(Car.includes(:parts).joins(:parts).to_sql).to_a。t*前缀表示该表。或者您可以使用选择ActiveRecord::Base.connection.exec_query(Car.joins(:parts).select('cars.*, parts.*').to_sql)。 -
@SebastianPalma 谢谢,这是朝着正确方向迈出的一步。我看起来需要转换输出。我敢打赌 ActiveRecord 内部有一些东西可以做到这一点。
标签: ruby-on-rails ruby-on-rails-5 mysql2