由于最新的Rails 3版本不再从lib中自动加载模块和类, 最好的装货方式是什么?
从github:
在这次提交中做了一些更改: 不自动加载代码在*lib*的应用程序(现在你需要显式 要求他们)。这使得应用程序的行为更接近于引擎 (lib中的代码仍然是自动加载插件);
由于最新的Rails 3版本不再从lib中自动加载模块和类, 最好的装货方式是什么?
从github:
在这次提交中做了一些更改: 不自动加载代码在*lib*的应用程序(现在你需要显式 要求他们)。这使得应用程序的行为更接近于引擎 (lib中的代码仍然是自动加载插件);
当前回答
从Rails 5开始,建议将lib文件夹放在app目录下,或者为文件夹创建其他有意义的名称空间,如服务、演示器、功能等,并将其放在app目录下,以便由Rails自动加载。
请检查这个GitHub讨论链接。
其他回答
从Rails 2.3.9开始,在config/application中有一个设置。Rb,您可以在其中指定包含要自动加载的文件的目录。
从application.rb:
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
如果只有某些文件需要访问lib中的模块,只需向需要它的文件添加require语句。例如,如果一个模型需要访问一个模块,则添加:
require 'mymodule'
在模型的顶部。rb文件。
从Rails 5开始,建议将lib文件夹放在app目录下,或者为文件夹创建其他有意义的名称空间,如服务、演示器、功能等,并将其放在app目录下,以便由Rails自动加载。
请检查这个GitHub讨论链接。
配置。autooad_paths不适合我。我用另一种方法来解
Ruby on rails 3不会自动重载/lib文件夹中的代码。我把它放到ApplicationController里面
Dir["lib/**/*.rb"].each do |path|
require_dependency path
end
我也有同样的问题。下面是我的解决方法。解决方案加载lib目录和所有子目录(不仅仅是direct目录)。当然,您可以将此用于所有目录。
# application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]