动态地将模块包含在Rails中的另一个模块中

问题描述 投票:2回答:1

我想动态地将某个文件夹中的所有模块包含到这个其他模块中。我的代码如下:

module Extensions
  module ProductExtension
    def add_included_extensions
      extensions = Pathname.glob("lib/extensions/merchant/*.rb")
        .map(&:basename)
        .collect{|x| 
          x.to_s.gsub(".rb", "")
          .titleize.gsub(" ","")
        }

      extensions.each do |merchant|
        include "Extensions::MerchantExtensions::#{merchant}".constantize
      end
    end
    def add_items
      add_included_extensions
      Merchant.all.each do |merchant|
        send("add_#{merchant.name.downcase}_items")
      end
    end
  end
end

但是它似乎并没有实际包含文件,因为当我调用send方法时,它说它调用的方法不存在。知道我可能做错了吗?

ruby-on-rails ruby-on-rails-3 module
1个回答
10
投票

问题是您将模块包含在实例方法中,因此它们不包含在类中。

尝试:

self.class.send(:include, "Extensions::MerchantExtensions::#{merchant}".constantize)
© www.soinside.com 2019 - 2024. All rights reserved.