ruby-on-rails - 我如何在 ruby​​ on rails 中按相关性排序

标签 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

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

我的问题是,我该如何对我的结果进行排序,以便拥有所有指定工具的人排在列表顶部,然后拥有较少工具的人排在下面?

所以现在澄清一下,我得到了一份没有特定顺序的列表,列出了我的所有承包商,这些承包商至少拥有一种指定的工具。我该如何排序该列表,以便拥有更多工具的人出现在列表顶部,而拥有较少工具的人出现在底部?

提前感谢您的帮助:)

最佳答案

你可以试试这个,大多数 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')

关于ruby-on-rails - 我如何在 ruby​​ on rails 中按相关性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40887227/

相关文章:

ruby-on-rails - 获取 Stripe 的美分价格

ruby-on-rails - Heroku Rails Force SSL 重定向循环

ruby-on-rails - Rails - 获取当前请求的 'URI Pattern'

ruby-on-rails - 按 JSON 数组中的匹配数查询和排序

ruby-on-rails - 需要使用 Anemone 登录的抓取页面

ruby-on-rails - win7下如何使用pik?

javascript - Rails 应用程序 C9 中的 JavaScript 问题

ruby-on-rails - 如何在我的 Rails 应用程序中测试 ActiveRecord::RecordNotFound?

ruby-on-rails - 遗漏部分

ruby-on-rails - 在 DreamHost 上安装 Radiant