PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres ORDER BY-Werte in der IN-Liste mit Rails Active Record

Ihre verlinkte Antwort bietet genau das, was Sie brauchen, Sie müssen sie nur flexibel in Ruby codieren.

Etwa so:

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

Tatsächlich könnten Sie das einfach in ein Modul packen und es in alle ActiveRecord-Klassen mischen, die es benötigen, da es table_name verwendet und self es ist nicht mit bestimmten Klassennamen implementiert.