sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres ORDER BY valores en la lista IN usando Rails Active Record

Su respuesta vinculada proporciona exactamente lo que necesita, solo necesita codificarla en Ruby de manera flexible.

Algo como esto:

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

De hecho, podría poner eso fácilmente en un módulo y mezclarlo con cualquier clase de ActiveRecord que lo necesite, ya que usa table_name y self no está implementado con ningún nombre de clase específico.