代码之家  ›  专栏  ›  技术社区  ›  opsb

重写Rails 3中的作用域

  •  1
  • opsb  · 技术社区  · 15 年前

    我想重写一个现有的作用域,为它添加一个额外的条件。我已经用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
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   opsb    15 年前

    好的,这里有个答案,不确定是不是最干净,但它能用

    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