Переопределить область в рельсах 3 - PullRequest
1 голос
/ 24 октября 2010

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

2 голосов
/ 24 октября 2010

ОК, вот ответ, не уверен, что он самый чистый, но работает

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
...