我似乎遇到了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
换句话说,我是否需要将类嵌套在模块结构中?
答案 0 :(得分:6)
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)
这应该照顾你的问题。