好的,我们有很多个。
我想得到Accounts
,所有的Schedules
,但只提取Impressions
,Accounts.name
和Accounts.schedules
的计数
这是一个可视化的我想要什么给1个帐户(我想要所有帐户)
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)
我想在尽可能少的查询中做到这一点,也许还能学到一些东西!我喜欢效率和优化。
最佳答案
使用选择查询
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")
应该在一个查询中完成,那么对象将响应列别名“like
schedule_date
和schedule_impression_count
如果需要将这些对象用于同一视图中的其他数据,那么
Account.eager_load(schedules: :impressions)
也应该可以工作,并且还将执行单个查询。关于mysql - Activerecord:提取特定的列和关联的关联计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37081020/