我怎样才能在轨道上的红宝石中按相关性进行订购

时间:2016-11-30 11:29:05

标签: ruby-on-rails ruby ruby-on-rails-4

我发生了查询

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

所以这会查看我的参数,然后如果找到列表中的工具,它会将其添加到数组中,然后在工具集中搜索至少包含其中一个工具的所有人。

我的问题是,我如何订购我的结果,以便所有指定工具的人都出现在列表的顶部,然后那些人少了?

所以为了澄清,目前我得到的所有承包商都没有特定顺序的列表,其中至少有一个指定的工具。我如何订购该列表,以便拥有更多工具的人出现在列表的顶部,而较少的人出现在底部?

提前感谢您的任何帮助:)

1 个答案:

答案 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')