Переопределить область в рельсах 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