高级activerecord查询与限制关联的位置

时间:2013-05-03 17:35:08

标签: ruby-on-rails ruby-on-rails-3 activerecord squeel

我正在尝试使用activerecord进行更高级的查询,但无法找出编写它的最佳方法。希望这是有道理的......

我的POSTGRES / rails app有型号:

Company has_many :employees
Employee has_many :evaluations

评估有十进制列:得分。我希望按名称获得公司10个最低评估分数。但我也只想从每位员工那里获得一个单一的最低分。我不希望结果列表中的10个分数中有5个来自同一个员工ID。

我有:

@list = Company.where(:name => 'Google').joins(:evaluations)

但我正在努力解决如何将评估限制在单个employee.id上的单个低值。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

这里是我头脑中的一个'猜测:

Employee.
  select('employees.*, min(evaluations.score) as lowest_score').
  joins(:company, :evaluations).
  where(:company => {:name => 'Google'}).
  group('employees.id').
  order('lowest_score').
  limit(10)

答案 1 :(得分:0)

@list = Evaluation.joins(:employee => :company)
  .where(:company => { :name =>  "Google" })
  .order(:score)
  .group(:employee => :id)
  .first(10)
IIRC,按分数排序应该意味着你不必费心去做min函数和东西,因为它会在进行分组时选择第一条记录,这将是最低分。给它一个旋转。