6

我似乎对 Rails 中 Lib 文件夹的命名约定有疑问,并且提供给我的错误消息没有帮助。[例如,我收到一条消息说 XXX::YYY::TextBox 应该被定义为 xxx/yyy/text_box.rb,即使它在那里明确定义。] 我想我弄错了约定。

假设我正在开发 YourModule::MyModule::MyClass。我清楚地知道这个文件应该位于

lib/your_module/my_module/my_class.rb

但是这里的实际文件应该是什么样子?其中哪一个(如果有的话)是正确的?

#your_module/my_module/my_class.rb
module YourModule
  module MyModule
    class MyClass
       ...
    end
  end
end

或者

#your_module/my_module/my_class.rb
class MyClass
  ...
end

换句话说,我是否需要将类嵌套在模块结构中?

4

1 回答 1

7

lib 文件夹没有什么约定,因为它不是自动加载的。因此,如何组织文件取决于您,但您必须正确命名类。你的第一个例子是正确的。

要获得包含的文件,您需要在 application.rb 文件中指定您想要的文件,请参见此示例:Best way to load module/class from lib folder in Rails 3?

我建议创建一个名为 的文件夹lib/modules,因为您可能不会有很多。命名文件my_class.rb。然后在application.rb你需要:

config.autoload_paths += %W(#{config.root}/lib/modules)

那应该可以解决您的问题。

于 2012-04-15T23:30:55.740 回答