我认为答案是追踪现有 Arelorder
的定义位置。
module ActiveRecord
module QueryMethods
def order(*args)
relation = clone
relation.order_values += args.flatten unless args.blank?
relation
end
end
end
控制台中的快速测试验证更改是否有效
module ActiveRecord::QueryMethods
def order(*args)
relation = clone
if args.first
puts "ordering in ascending id"
relation.order_values += ["id ASC"]
else
puts "ordering in descending id"
relation.order_values += ["id DESC"]
end
relation
end
end
所以,你可以做这样的事情。
但我的建议是创建一个my_order
保持order
原样不变的自定义,但封装了相同的逻辑。
但是您可以直接在活动记录上定义
class ActiveRecord::Base
class << self
def my_order(*args)
self.order(*my logic for ordering*)
end
end
end