我有一个问题正在发生
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/