Ruby on rails 无法加载库目录模块-未初始化常量-rails 2到rails 3升级
我目前正在将rails v2中的一个应用程序迁移到v3 在我的Ruby on rails 无法加载库目录模块-未初始化常量-rails 2到rails 3升级,ruby-on-rails,ruby,ruby-on-rails-3.1,routes,upgrade,Ruby On Rails,Ruby,Ruby On Rails 3.1,Routes,Upgrade,我目前正在将rails v2中的一个应用程序迁移到v3 在我的lib/中,我在子目录中有一些模块,例如, 我有lib/search/host\u search.rb 带着 module HostSearch def do_search(args) #... end end 然后我需要在名为Discovery::HostController
lib/
中,我在子目录中有一些模块,例如,
我有lib/search/host\u search.rb
带着
module HostSearch
def do_search(args)
#...
end
end
然后我需要在名为Discovery::HostController
def search_results
output = HostSearch.do_search(:search_string => @search_string,
:page => params[:page],
:user => @current_user)
#...
end
但我得到了:
uninitialized constant Discovery::HostController::HostSearch
…我试着将这行代码放到application.rb中,但它不起作用
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
我发现,在您的情况下,将模块移动到lib文件夹或显式地包含要加载的文件夹是有效的 config.autoload_路径+=%W(#{config.root}/lib/search)
我想我们缺少了一些通灵的东西。另一件事是,如果你不想弄乱application.rb文件,需要这个文件,如果我记得的话,它会从lib文件夹中获取文件路径,例如:search/host\u search我认为如果你把
HostSearch
模块放在一个搜索子目录下(即lib/search/host\u search.rb
),那么你需要为它命名名称:
module Search
module HostSearch
end
end
如果不想为其命名,可以将文件移动到lib根目录中:lib/host\u search.rb
另见: