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)