好的,我们有很多个。
我想得到Accounts,所有的Schedules,但只提取ImpressionsAccounts.nameAccounts.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")

应该在一个查询中完成,那么对象将响应列别名“likeschedule_dateschedule_impression_count
如果需要将这些对象用于同一视图中的其他数据,那么Account.eager_load(schedules: :impressions)也应该可以工作,并且还将执行单个查询。

关于mysql - Activerecord:提取特定的列和关联的关联计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37081020/

10-16 15:12