PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Valeurs Postgres ORDER BY dans la liste IN à l'aide de Rails Active Record

Votre réponse liée fournit exactement ce dont vous avez besoin, il vous suffit de la coder en Ruby de manière flexible.

Quelque chose comme ça :

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

En fait, vous pouvez facilement mettre cela dans un module et le mélanger dans toutes les classes ActiveRecord qui en ont besoin, car il utilise table_name et self il n'est pas implémenté avec des noms de classe spécifiques.