我发生了查询
contractors = User.all
@tools = Tool.all
tools_list = []
@tools.each do |t|
if params[t.name]
tools_list.push("#{t.name}")
end
end
contractors = contractors.joins(:tools).where('tools.name IN (?) ', tools_list).uniq
所以这会查看我的参数,然后如果找到列表中的工具,它会将其添加到数组中,然后在工具集中搜索至少包含其中一个工具的所有人。
我的问题是,我如何订购我的结果,以便所有指定工具的人都出现在列表的顶部,然后那些人少了?
所以为了澄清,目前我得到的所有承包商都没有特定顺序的列表,其中至少有一个指定的工具。我如何订购该列表,以便拥有更多工具的人出现在列表的顶部,而较少的人出现在底部?
提前感谢您的任何帮助:)
答案 0 :(得分:3)
你可以试试这个,大多数SQL子句(如果不是全部)都是在ActiveRecord中定义的:
User
.joins(:tools)
.select('users.*, count(tools.id) "counting"')
.where(tools: { name: tools_list })
.having('counting > 0')
.group('users.id')
.order('counting DESC')