From 17aa9b97e9496db031e87e2e8563a4b565c2cd4e Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Fri, 11 Apr 2025 10:28:12 +0200 Subject: [PATCH] Monkey patch a prepend_order method --- app/models/card/golden.rb | 7 +------ lib/rails_ext/prepend_order.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 lib/rails_ext/prepend_order.rb diff --git a/app/models/card/golden.rb b/app/models/card/golden.rb index 92fd3a199..759179415 100644 --- a/app/models/card/golden.rb +++ b/app/models/card/golden.rb @@ -6,12 +6,7 @@ module Card::Golden has_one :goldness, dependent: :destroy, class_name: "Card::Goldness" - scope :with_golden_first, -> do - left_outer_joins(:goldness).tap do |relation| - # Make sure it can be layered in with other orderings taking precedence. - relation.order_values.unshift("card_goldnesses.id IS NULL") - end - end + scope :with_golden_first, -> { left_outer_joins(:goldness).prepend_order("card_goldnesses.id IS NULL") } end def golden? diff --git a/lib/rails_ext/prepend_order.rb b/lib/rails_ext/prepend_order.rb new file mode 100644 index 000000000..b7eb995fa --- /dev/null +++ b/lib/rails_ext/prepend_order.rb @@ -0,0 +1,16 @@ +module ActiveRecordRelationPrependOrder + extend ActiveSupport::Concern + + included do + def prepend_order(*args) + new_orders = args.flatten.map { |arg| arg.is_a?(String) ? arg : arg.to_sql } + + spawn.tap do |relation| + relation.order_values = new_orders + order_values + end + end + end +end + +ActiveRecord::Relation.include(ActiveRecordRelationPrependOrder) +ActiveRecord::AssociationRelation.include(ActiveRecordRelationPrependOrder)