Я думаю, что ответ заключается в том, чтобы отследить, где определен существующий Арел order
.
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