我收到按“收入”排序的UserIds列表(一次约1000个)。我在“我的系统数据库”中有用户记录,但“收入”列不存在。我想从“我的系统的数据库”中检索用户 在列表中收到的排序顺序中。我尝试使用Active Record执行以下操作,期望以与排序列表中相同的顺序检索记录,但它不起作用。
//PSEUDO CODE
User.all(:conditions => {:id => [SORTED LIST]})
我在下面的链接中找到了类似问题的答案,但我不确定如何使用Active Record实施建议的解决方案。
还有其他办法吗?
请指导。
Shardul。
答案 0 :(得分:6)
您的链接答案提供了您所需要的,您只需要以灵活的方式在Ruby中编写代码。
这样的事情:
class User
def self.find_as_sorted(ids)
values = []
ids.each_with_index do |id, index|
values << "(#{id}, #{index + 1})"
end
relation = self.joins("JOIN (VALUES #{values.join(",")}) as x (id, ordering) ON #{table_name}.id = x.id")
relation = relation.order('x.ordering')
relation
end
end
事实上,您可以轻松地将其放入模块中并将其混合到任何需要它的ActiveRecord类中,因为它使用table_name
和self
未使用任何特定的类名实现它。
答案 1 :(得分:0)
MySQL用户可以通过FIELD
函数执行此操作,但Postgres缺少它。但是,这些问题有解决方法:Simulating MySQL's ORDER BY FIELD() in Postgresql