Вашият свързан отговор предоставя точно това, от което се нуждаете, просто трябва да го кодирате в Ruby по гъвкав начин.
Нещо подобно:
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
Всъщност бихте могли лесно да поставите това в модул и да го смесите във всеки клас ActiveRecord, който се нуждае от него, тъй като използва table_name
и self
не е имплементиран с никакви конкретни имена на класове.