PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres ORDER BY valori nell'elenco IN utilizzando Rails Active Record

La tua risposta collegata fornisce esattamente ciò di cui hai bisogno, devi solo codificarla in Ruby in modo flessibile.

Qualcosa del genere:

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

In effetti potresti facilmente inserirlo in un modulo e mescolarlo in qualsiasi classe ActiveRecord che ne abbia bisogno, poiché utilizza table_name e self non è implementato con nessun nome di classe specifico.