0

我正在使用 Ruby on Rails,我想知道如何从具有相同名称的模块中包含一个模块。

所以,我有一个名为 Course 的 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

此代码将在课程模型中

4

1 回答 1

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

也许您可以尝试找到更好的设计,例如以不同的方式重命名这些模块,避免一次又一次地重新定义相同的模块

于 2012-10-22T17:29:00.387 回答