PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Valores Postgres ORDER BY na lista IN usando Rails Active Record


Sua resposta vinculada fornece exatamente o que você precisa, você só precisa codificá-la em Ruby de maneira flexível.

Algo assim:
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

Na verdade, você pode facilmente colocar isso em um módulo e misturá-lo em qualquer classe ActiveRecord que precise, já que ele usa table_name e self não é implementado com nenhum nome de classe específico.