首先显示具有特定ID的记录

时间:2014-04-18 12:46:28

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

我必须在页面上显示所有用户。 但我有一个array,其中一些ids用户会说[1,2,3] 我想在页面上显示所有记录,但列表中包含的记录应该在顶部。 它可以通过ActiveRecord查询完成,或者我必须首先获取所有用户,然后对其进行一些操作

2 个答案:

答案 0 :(得分:3)

您可以简单地执行两个单独的查询并合并结果:

User.where("id IN (?)", ids) + User.where("id NOT IN (?)", ids)

更复杂的解决方案是一次获取所有用户,然后使用自定义排序方法对它们进行排序,这种方法更喜欢数组中的数字。

答案 1 :(得分:2)

这至少与MySQL有关:

User.order("id IN (#{array.join(',')}) DESC")

当然,您需要注意使用此解决方案完全控制array内容。此外,如果array为空,则会中断,因此您必须检查其空虚,例如:

@users = array.any? ? User.order("id IN (#{array.join(',')}) DESC") : User.all

这种方法的优点是你最后仍然有ActiveRecord::Relation个对象,你可以在其上调用另一个AREL方法,如where,或者应用分页。