使用Rails Active Record在IN列表中Postgres ORDER BY值

SB.*_*SB. 2 postgresql activerecord ruby-on-rails sql-order-by in-clause

我收到按"收入"排序的UserIds列表(一次大约1000个).我在"我的系统数据库"中有用户记录,但"收入"列不存在.我想从列表中收到的排序顺序中的"我的系统数据库"中检索用户.我尝试使用Active Record执行以下操作,期望以与排序列表中相同的顺序检索记录,但它不起作用.

//PSEUDO CODE
User.all(:conditions => {:id => [SORTED LIST]})
Run Code Online (Sandbox Code Playgroud)

我在下面的链接中找到了类似问题的答案,但我不确定如何使用Active Record实现建议的解决方案.

按IN值列表排序

还有其他办法吗?

请指导.

Shardul.

Cod*_*lan 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
Run Code Online (Sandbox Code Playgroud)

实际上,您可以轻松地将其放入模块中并将其混合到需要它的任何ActiveRecord类中,因为它使用table_name并且self不使用任何特定的类名实现.