Переопределить область в рельсах 3

Я хочу переопределить существующую область видимости, чтобы добавить к ней дополнительное условие. Я показал свою попытку сделать это с помощью alias_method. К сожалению, этот подход не работает с областями, я получаю неопределенную ошибку метода. Как мне сделать это с областями действия?

module Delayed
  module Backend
    module ActiveRecord
      class Job < ::ActiveRecord::Base
        belongs_to :queue

        scope :in_unlocked_queue, lambda {
          joins(:queue) & Queue.unlocked
        }

        alias_method :orig_ready_to_run, :ready_to_run
        scope :ready_to_run, lambda {|worker_name, max_run_time|
          orig_ready_to_run(worker_name, max_run_time).in_unlocked_queue
        }
      end
    end
  end
end

1 ответ

Решение

Хорошо, вот ответ, не уверен, что это самый чистый, но он работает

require 'delayed_job'

module Delayed
  module Backend
    module ActiveRecord
      class Job < ::ActiveRecord::Base
        belongs_to :queue

        scope :in_unlocked_queue, lambda {
          joins(:queue) & Queue.unlocked
        }

        scope :orig_ready_to_run, scopes[:ready_to_run]
        scope :ready_to_run, lambda {|worker_name, max_run_time|
          orig_ready_to_run(worker_name, max_run_time).in_unlocked_queue
        }
      end
    end
  end
end
Другие вопросы по тегам