动态包含rails模块

时间:2012-10-22 17:16:20

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我正在使用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

此代码将在课程模型中

1 个答案:

答案 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

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