0

Ruby on 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

このコードは Course モデルにあります

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 に答える