Activerecord:填充特定列和关联的关联计数

时间:2016-05-06 20:36:51

标签: mysql sql ruby-on-rails ruby activerecord

好吧,我们Accounts有许多Schedules,其中Impressions很多。

我希望获得Accounts.nameAccounts.schedules全部,但只能获取Accounts.schedules.dateAccounts.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)

我希望在尽可能少的查询中做到这一点,也许还可以学到一些东西!我喜欢效率和优化。

1 个答案:

答案 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_dateschedule_impression_count

如果您需要在同一视图中将这些对象用于其他数据,那么Account.eager_load(schedules: :impressions)也应该起作用,并且还将执行单个查询。