Liên kết đến câu trả lời của bạn cung cấp chính xác những gì bạn cần, bạn chỉ cần viết mã nó bằng Ruby một cách linh hoạt.
Một cái gì đó như thế này:
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
Trên thực tế, bạn có thể dễ dàng đưa nó vào một mô-đun và trộn nó vào bất kỳ lớp ActiveRecord nào cần nó, vì nó sử dụng table_name
và self
nó không được triển khai với bất kỳ tên lớp cụ thể nào.