2013-05-10 80 views
2

我想動態地將某個文件夾內的所有模塊包含到這個其他模塊中。我的代碼如下:動態地在Rails中的另一個模塊中包含模塊

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 

但是它似乎並沒有被實際包括的文件,因爲當我打電話的發送方法,它說,它調用不存在的方法。任何想法我可能做錯了什麼?

+0

只有快看 - 你用'titleize'代替'camelize' – MikDiet 2013-05-10 21:43:01

回答

6

問題是你將模塊包含在實例方法中,所以它們不包含在類中。

嘗試:

self.class.send :include, "Extensions::MerchantExtensions::#{merchant}".constantize

+1

這真是棒極了!謝謝 – justNeph 2013-05-11 19:49:18