好吧,我们Accounts
有许多Schedules
,其中Impressions
很多。
我希望获得Accounts.name
,Accounts.schedules
全部,但只能获取Accounts.schedules.date
,Accounts.schedules.summary
以及Accounts.schedules.impressions
的数量
这里有一个可视化我想要的帐户(我想要所有帐户)
Account:
.name
Schedules
.date
.summary
count(Schedule.impressions)
以下是查询过多的代码
Account.find_each do |account|
puts a.name # Account.name
a.schedules.each do |schedule|
puts schedule.date # Account.schedule.date
puts schedule.summary # Account.schedule.summary
puts schedule.impressions.count # Count(Account.schedule.impressions)
我希望在尽可能少的查询中做到这一点,也许还可以学到一些东西!我喜欢效率和优化。
答案 0 :(得分:1)
使用选择查询
Account.
joins(schedules: :impressions).
select("accounts.name as account_name,
schedules.date as schedule_date,
schedules.summary as schedule_summary,
count(impressions.id) as schedule_impression_count" ).
group("accounts.name,schedules.date,schedules.summary")
应该在一个查询中执行,然后对象将响应列别名',如schedule_date
和schedule_impression_count
如果您需要在同一视图中将这些对象用于其他数据,那么Account.eager_load(schedules: :impressions)
也应该起作用,并且还将执行单个查询。