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

如何在所有Rails项目的ActiveRecord模型中包含模块?

  •  0
  • Zeke  · 技术社区  · 14 年前

    我想在我的Rails应用程序中的每个ActiveRecord模型中包含此模块,而不删除 include NotificationResourceableTraits 在每个文件中。有办法吗?

    module NotificationResourceableTraits
      def self.included(base)
        base.has_many :notification_resources, :as => :notification_resourceable
        base.has_many :notifications, :through => :notification_resources
      end
    end
    
    1 回复  |  直到 12 年前
        1
  •  1
  •   Daniel Beardsley    14 年前

    我刚刚解决了这个问题。看看我的要点: http://gist.github.com/404298

    您只需执行以下操作:

    ModelDiscovery.valid_active_record_classes.each do |model|
      model.include YourMixinModule
    end
    

    解释

    1. 获取“应用程序/模型”中所有文件的列表
    2. 将文件名转换为camelcase
    3. 使所有的都不变
    4. 检查表是否存在(如果需要)