模型的模块和命名空间之间有什么区别

时间:2014-12-24 09:24:52

标签: ruby-on-rails ruby

我在application.rb中配置了从子文件夹加载所有模型的内容:

config.autoload_paths += Dir["#{config.root}/app/models/**/"]

让我们假设,我想在/models/foo/bar.rb中创建模型Bar

现在我可以将模型Bar命名为文件夹Foo,并将其命名为:

class Foo::Bar
end

相反的方法是将其放入模块中:

module Foo
  class Bar
  end
end

两种情况下来自全局命名空间的类的名称都是相同的。

考虑到,我不需要包含这个模块或包含在这个模块中,并且这只是为了将命名空间中的一个域的模型放置,这些方法有什么区别?

1 个答案:

答案 0 :(得分:0)

一个不同的是,如果您还希望拥有Foo课程,那么您的第二个示例将无效:

class Foo
end

module Foo
  class Bar
  end
end
# => TypeError: Foo is not a module

class Foo::Bar
end
# no error