我正在尝试将一个模块添加到我的 Rails 3.1 应用程序中,我以前可以这样做,但它现在无法使用我添加的最新模块。非常感谢任何想法
在应用程序中
# Custom directories with classes and modules you want to be autoloadable. config.autoload_paths += %W(#{Rails.root}/app/workers #{Rails.root}/lib/validators #{Rails.root}/lib/content_items #{Rails.root}/lib/booher_modules )
在 lib/booher_modules/mongoid_counter_cache.rb 中
module Mongoid module CounterCache extend ActiveSupport::Concern module ClassMethods def counter_cache(options) ... some stuff ...
现在投票.rb:
class Vote include Mongoid::Document include Mongoid::Timestamps include Mongoid::CounterCache
每当我尝试启动应用程序时,我都会收到未初始化的常量错误:
Users/Tim/Sites/polco/app/models/vote.rb:4:in `': uninitialized constant Mongoid::CounterCache (NameError) from /Users/Tim/Sites/polco/app/models/vote.rb:1:in `' from /Users/Tim/.rvm/gems/ruby-1.9.2-p290@cba/bundler/gems/mongoid-ccae125ccfd8/lib/rails/mongoid.rb:66:in `load_model' ... so on
我试图将 require 'lib/mongoid_counter_cache.rb' 放在 vote.rb 中,但我得到:
rails c /Users/Tim/.rvm/gems/ruby-1.9.2-p290@cba/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:306:in `rescue in depend_on': No such file to load -- lib/mongoid_counter_cache (LoadError)
最佳答案
您遇到这个问题是因为 Rails 试图包含“Mongoid::CounterCache”。
为此,它正在自动加载路径中的某处寻找文件“mongoid/counter_cache.rb”。
所以...
...
lib/booher_modules/mongoid/counter_cache.rb
...
从而修复...
mkdir -p lib/booher_modules/mongoid
mv lib/booher_modules/mongoid_counter_cache.rb lib/booher_modules/mongoid/counter_cache.rb
您的特定“require 'lib/mongoid_counter_cache.rb'”不起作用的原因是因为它不在自动加载路径中查找它在不包含 lib/的主要包含路径 ($:) 中查找booher_modules(只有自动加载配置了那个)
关于ruby - rails3.1 自动加载失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546746/