答えは、既存の 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