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.rb和production.rb ;
添加config/application.rb
:
config.autoload_paths += %W(#{config.root}/lib) config.threadsafe! config.dependency_loading = true