我有属于某区的候选人。区可以是区域类型“集会”或“参议院”,候选人可以是现任(真/假)。我正在尝试按照他们所属的区域类型对候选人进行排序:
assembly_nonincumbents = Candidate.where(:incumbent => true, :district.district_type => 'Assembly').order('LOWER(last_name) ASC')
但是这给了我一个错误:未定义的方法`district_type'for:district:Symbol
答案 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名候选人)。