【问题标题】:Nesting modules inside of a Rails eninge gem在 Rails 引擎 gem 中嵌套模块
【发布时间】:2013-05-02 16:56:45
【问题描述】:

在作为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

【问题讨论】:

    标签: ruby-on-rails ruby gem


    【解决方案1】:

    选项 A. 是正确的,但应该是 lib/my_engine/blog.rb。您可以阅读有关 Ruby 和 Rails 命名约定的更多信息here

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      相关资源
      最近更新 更多