如果我有 id 为 1,2,3,4 的记录,并且希望以某种方式对它们进行排序,例如 1,4,2,3,我该怎么做?
我是这么想的,但当然行不通。
Service.all.order(id: [1, 4, 2, 3])
最佳答案
Justin Weiss 写了 blog article about this problem就在两天前。
这似乎是告诉数据库首选顺序并直接从数据库加载按该顺序排序的所有记录的好方法。他的例子blog article .
将以下扩展添加到您的应用程序中:
# e.g. in config/initializers/find_by_ordered_ids.rb
module FindByOrderedIdsActiveRecordExtension
extend ActiveSupport::Concern
module ClassMethods
def find_ordered(ids)
order_clause = "CASE id "
ids.each_with_index do |id, index|
order_clause << "WHEN #{id} THEN #{index} "
end
order_clause << "ELSE #{ids.length} END"
where(id: ids).order(order_clause)
end
end
end
ActiveRecord::Base.include(FindByOrderedIdsActiveRecordExtension)
这将允许您编写如下查询:
Service.find_ordered([2, 1, 3]) # => [2, 1, 3]
关于ruby-on-rails - Active Records 按 ID 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29785546/