2012-10-22 135 views
0

我正在使用Ruby on Rails,並且我想知道如何從包含相同名稱的模塊中包含模塊。動態包括rails模塊

所以,我有一個叫做場

它需要一個ActiveRecord的模型取決於course.level CourseModuleFactory有兩個具有相同的名稱,但在不同的文件夾2個CourseModuleFactory模塊包括。

所以我需要的代碼是這樣的:

after_initialize :course_module_factory_level 

def course_module_factory_level 
    if self.level == "A" 
    self.class.send(:include, CourseModuleFactory) #from folder A 
    else 
    self.class.send(:include, CourseModuleFactory) #from folder B 
    end 
end 

該代碼將在課程模式

回答

1

沒有質疑你的實現,也許你可以使用這個:

def course_module_factory_level 

    # will remove the module definition 
    remove_const(CourseModuleFactory) 

if self.level == "A" 
    # will reload the file and redefine the module. Note that require only loads once. 
    load('./A/course_module.rb') 
    self.class.send(:include, CourseModuleFactory) 
    else 
    load('./B/course_module_factory.rb') 
    self.class.send(:include, CourseModuleFactory) 
    end 
end 

也許您可以嘗試找出更好的設計,例如對這些模塊進行不同的重命名,並避免一次又一次重新定義相同的模塊。