我正在使用Ruby on Rails,我想知道如何从具有相同名称的模块中包含模块。
所以,我有一个名为Course
的ActiveRecord模型它需要包含CourseModuleFactory,具体取决于course.level 有两个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
此代码将在课程模型中
答案 0 :(得分: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
也许您可以尝试找出更好的设计,例如以不同方式重命名这些模块,避免不得不一次又一次地重新定义相同的模块