【发布时间】:2013-11-13 12:06:15
【问题描述】:
如何使用此查询按:key_id 进行分组(key_id 是报告表中的一列),并且该查询是称为Project 的模型中的一个方法
self.reports.select{ |report| report.level <= 50}
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-3.2 ruby-on-rails-4
如何使用此查询按:key_id 进行分组(key_id 是报告表中的一列),并且该查询是称为Project 的模型中的一个方法
self.reports.select{ |report| report.level <= 50}
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-3.2 ruby-on-rails-4
这应该可以解决问题:
self.reports.select{ |report| report.level <= 50 }.group_by(&:key_id)
.group_by(&:key_id) 是.group_by{ |report| report.key_id } 的简洁表达方式
【讨论】:
您不想在此处使用带有块的 select 方法。原因是这是在数组上定义的方法,因此返回的是纯 ruby 数组,而不是关系对象。而是这样做:
self.reports.where('level <= ?', 50).group(:key_id)
【讨论】:
column "reports.id" must appear in the GROUP BY clause or be used in an aggregate function - ` SELECT "reports".* FROM "reports" WHERE "reports"."project_id" = $1 AND (level