若要查看是否有载入请在rails c
输入这行ActiveSupport::Dependencies.autoload_paths
OR
Rails.application.config.assets.paths
即可
> rails c
> ActiveSupport::Dependencies.autoload_paths
[
[ 0] "/Users/app/assets",
[ 1] "/Users/app/channels",
[ 2] "/Users/app/controllers",
[ 3] "/Users/app/controllers/concerns",
[ 4] "/Users/app/helpers",
[ 5] "/Users/app/jobs",
[ 6] "/Users/app/mailers",
[ 7] "/Users/app/models",
[ 8] "/Users/app/models/concerns",
[ 9] "/Users/app/uploaders",
我们需要的是载入这行 -> [10] "/Users/lib/modules",
[11] "/Users/.rvm/gems/ruby-2.3.1/gems/devise-4.4.1/app/controllers",
[12] "/Users/.rvm/gems/ruby-2.3.1/gems/devise-4.4.1/app/helpers",
[13] "/Users/.rvm/gems/ruby-2.3.1/gems/devise-4.4.1/app/mailers",
[14] "/Users/.rvm/gems/ruby-2.3.1/gems/font-awesome-rails-4.7.0.3/app/assets",
[15] "/Users/.rvm/gems/ruby-2.3.1/gems/font-awesome-rails-4.7.0.3/app/helpers",
[16] "/Users/.rvm/gems/ruby-2.3.1/gems/material_icons-2.2.1/app/assets",
[17] "/Users/.rvm/gems/ruby-2.3.1/gems/material_icons-2.2.1/app/helpers",
[18] "/Users/.rvm/gems/ruby-2.3.1/gems/material_icons-2.2.1/app/models",
[19] "/Users/test/mailers/previews"
]
Controller 里使用
def add_to_cart
extend CommonHelper
current_cart.add_product_to_cart(@product)
end
View 里使用
大专栏 use mixin and autoload_paths vs eager_load_pathslanguage-erb highlighter-rouge">
<% extend CommonHelper %>
include
提供了混合它的Class的实例方法。(动态使用)extend
扩展为混合Class提供类方法。(静态使用)- 建议使用
extend
取代include
这样就不用include 在 new 了
extend or include
extend include 解说autoload_paths 以及 eager_load_paths使用方式
autoload_paths在 Rails版本 < 5以下做使用以下任一种方式即可使用 in
config/application.rb
config.autoload_paths += Dir["#{config.root}/lib/**"] config.autoload_paths += %W(#{config.root}/lib/modules)
eager_load_paths 在 Rails版本 >= 5使用以下任一种方式即可使用,in
config/application.rb
config.eager_load_paths << "#{Rails.root}/lib/modules" config.eager_load_paths += %W(#{config.root}/lib/modules) config.eager_load_paths += %W( #{config.root}/lib/modules #{config.root}/lib/my_others )
上production因安全所需会自动取消autoload_paths,所以在此建议使用eager_load_paths
上production会比以较不会发生异常。
总结:autoload_paths
就是当使用某个常量(比如module class时),rails会调用const_missing,然后在autoload_paths
的数组目录中查找,找到该常量后加载使用。简单认为,在使用时,才加载相关代码。 优点:能够快速激活rails,在激活rails时减少加载代码,在使用时临时加载进来。eager_load_paths
在rails激活时,就把eager_load_paths
中的目录代码加载进来.production环境时建议使用,eager_load_paths
加载。这样虽然激活的 时候速度会变慢,因为要加载更多代码,但是,这样加载预热后,在用户使用进程时,就能很快的调用到相关代码,因为已经在激活的时候加载好了。 关于lib目录中的代码文档根据实际情况需要,选择加载方式。