将模块嵌套在Rails引擎gem中

时间:2013-05-02 16:56:46

标签: ruby-on-rails ruby gem

在作为isolate_namespace Rails引擎gem的父模块中嵌套子模块的正确语法是什么?

# lib/myengine/engine.rb
module MyEngine
  class Engine < Rails::Engine
    isolate_namespace Myengine
    # def ...
  end
end

例如。父模块是MyEngine,子模块是Blog。 MyEngine将共享公共域,如CRUD,Taggable,Searchable等,这将保持gem代码DRY并与主应用程序(MyApp)隔离,同时继承隔离的命名空间和引擎。

这两种方法中的任何一种都是正确的吗?任何重构建议?

# A
# lib/myengine/blog.rb
module MyEngine
  module Blog
    # def ...
  end
end

# B
# lib/myengine/blog.rb
module MyEngine
  class Engine < Rails::Engine
    isolate_namespace Myengine
    module Blog
      # def ...
    end
  end
end

1 个答案:

答案 0 :(得分:1)

选项A.是正确的,但它应该是lib/my_engine/blog.rb。你可以阅读更多关于Ruby&amp; Rails命名约定here

此外,如果您想在博客命名空间下放置更多模块或类,请将它们放在文件夹lib/my_engine/blog中,并将它们嵌套在MyEngine::Blog下。