Rails 3自动加载

我有一个类ConstData:

class ConstData US_CITIES = ['miami', 'new york'] EUROPERN_CITIES = ['madrid', 'london'] end 

它存储在/lib/const_data.rb下

我的想法是在模型,控制器或视图中我可以做到:

获取US_CITIES等的ConstData::US_CITIES

Rails应自动加载此类,我从以下url获取: http : //groups.google.com/group/rubyonrails-talk/browse_thread/thread/662abfd1df9b2612?hl = zh-CN

但是这不起作用。 谁能解释我怎么做到这一点?

@daniel的post是从2008年开始的。自那时起,Rails发生了变化。
事实上,最近。 Rails3不会自动加载lib /目录。

你可以很容易地重新激活它。 打开config/application.rb并在config(在Application类中)中添加以下内容:

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

然后你的lib / dir将被自动加载。

autoload_paths不能为你工作的原因你被迫做了:

 Dir["lib/**/*.rb"].each do |path| require_dependency path end 

是因为你忘了命名你的课程

lib / awesome / stuffs.rb应该包含这样的类/模块:

 class/module Awesome::Stuffs .... 

但你有:

 class/module Stuffs .... 

Rails只能自动加载其名称与其文件路径和文件名匹配的类和模块。

🙂

config.autoload_paths对我不起作用。 我通过在ApplicationController以下内容来解决它:

 Dir["lib/**/*.rb"].each do |path| require_dependency path end 

按照lib目录的解决方案进行自动加载:

删除config.threadsafe! 来自development.rbproduction.rb ;

添加config/application.rb

 config.autoload_paths += %W(#{config.root}/lib) config.threadsafe! config.dependency_loading = true