ActiveRecord:按关系的属性对记录进行排序

时间:2014-01-23 21:04:42

标签: ruby-on-rails activerecord

我有属于某区的候选人。区可以是区域类型“集会”或“参议院”,候选人可以是现任(真/假)。我正在尝试按照他们所属的区域类型对候选人进行排序:

assembly_nonincumbents = Candidate.where(:incumbent => true, :district.district_type => 'Assembly').order('LOWER(last_name) ASC')

但是这给了我一个错误:未定义的方法`district_type'for:district:Symbol

1 个答案:

答案 0 :(得分:1)

此解决方案将使用子查询按区域过滤候选者。我认为这就是你想要做的事情。

assembly_incumbents = Candidate.where(
  incumbent: true,
  district_id: District.where(district_type: "Assembly")
).order("LOWER(last_name)")

<强>更新

如果您希望按districts表格中的列排序结果集,则需要进行连接,如下所示:

Candidate.joins(:district).
          where(incumbent: true).
          where("districts.district_type = ?", "Assembly").
          order("districts.district_number, LOWER(last_name)")

这样的事情应该有效,并且会先按district_number,然后按名称排序结果(所以如果第37区有4名候选人,他们都将来自36区候选人,但将在名单中按名称排序区37名候选人)。