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