Ruby on rails 重写rails 3中的作用域

Ruby on rails 重写rails 3中的作用域,ruby-on-rails,activerecord,named-scope,Ruby On Rails,Activerecord,Named Scope,我想覆盖一个现有的作用域,为其添加一个额外的条件。我已经演示了如何使用alias_方法来实现这一点。不幸的是,这种方法不适用于作用域,我得到一个未定义的方法错误。如何使用示波器 module Delayed module Backend module ActiveRecord class Job < ::ActiveRecord::Base belongs_to :queue scope :in_unlocked_queue, la

我想覆盖一个现有的作用域,为其添加一个额外的条件。我已经演示了如何使用alias_方法来实现这一点。不幸的是,这种方法不适用于作用域,我得到一个未定义的方法错误。如何使用示波器

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
模块延迟
模块后端
模块活动记录
类作业<::ActiveRecord::Base
属于:队列
范围:在\u解锁\u队列中,lambda{
联接(:queue)&queue.unlocked
}
别名方法:orig\u ready\u to\u run,:ready\u to\u run
范围:准备运行,lambda{124; worker_名称,最大运行时间|
原始准备运行(工作人员名称、最长运行时间)。处于解锁队列中
}
结束
结束
结束
结束

好的,这里有一个答案,不确定它是否是最干净的,但它有效

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
要求“延迟作业”
模块延迟
模块后端
模块活动记录
类作业<::ActiveRecord::Base
属于:队列
范围:在\u解锁\u队列中,lambda{
联接(:queue)&queue.unlocked
}
作用域:开始准备运行,作用域[:准备运行]
范围:准备运行,lambda{124; worker_名称,最大运行时间|
原始准备运行(工作人员名称、最长运行时间)。处于解锁队列中
}
结束
结束
结束
结束

如果我记得的话,您可以在AR3中使用方法而不是作用域。。。但我不太确定。