我目前正在将 Rails v2 中的应用程序迁移到 v3
在我的 lib/
我在子目录中有一些模块,例如,
我有 lib/search/host_search.rb
有一个
module HostSearch
def do_search(args)
#...
end
end
然后我需要在名为 Discovery::HostController < ApplicationController :
的 Controller 中使用它
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_paths += %W(#{config.root}/lib/search)
我认为我们缺少一些语法。另一件事是,如果您不想弄乱 application.rb 文件,则需要该文件,如果我记得的话,该文件采用 lib 文件夹中的文件路径,例如:search/host_search <- 检查一下。
关于ruby-on-rails - 无法加载 lib 目录模块 - 未初始化的常量 - rails 2 到 rails 3 升级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184857/