2013-02-21 38 views
0

我试图添加一个范围到所有ActiveRecord :: Base子类,但我的方法不工作,因为这些类需要被触及之前,他们通过调用ActiveRecord::Base.subclassesActiveRecord::Base.descendants列出。所以我不能通过包含我的ActiveSupport :: Concern扩展类来扩展循环中的类,其中包括范围。如何通过gem将作用域添加到所有ActiveRecord :: Base类中?

另外我不能使用Dir.glob(Rails.root.join("app/models*.rb").to_s)列出并要求所有的文件。因为在加载环境之前Rails.root会返回nil

那么我怎样才能扩展所有ActiveRecord :: Base子类与我的范围从宝石?

回答

1

添加到所有子类恰好:

class ActiveRecord::Base 
    def self.inherited(child) 
    child.instance_eval <<-EOV 
     scope ... 
    EOV 
    super 
    end 
end 

加入的ActiveRecord :: Base的

module MyScope 
    extend ActiveSupport::Concern 
    included do 
    scope ... 
    end 
end 

# Load it before_initialize: 

class Railtie < ::Rails::Railtie 
    config.before_initialize do 
    ActiveSupport.on_load :active_record do 
     include MyScope 
    end 
    end 
end 
相关问题