【问题标题】:cant load lib directory modules - uninitialized constant - rails 2 to rails 3 upgrade无法加载 lib 目录模块 - 未初始化的常量 - rails 2 到 rails 3 升级
【发布时间】:2012-01-01 08:39:39
【问题描述】:

我目前正在将 Rails v2 中的应用程序迁移到 v3

在我的lib/ 子目录中有一些模块,例如, 我有lib/search/host_search.rb

有一个

  module HostSearch
    def do_search(args)
       #...
    end
  end

那么我需要在一个名为Discovery::HostController < ApplicationController :的控制器中使用它

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/**/"]

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.1 routes upgrade


    【解决方案1】:

    在您的情况下,我发现将模块移动到 lib 文件夹或明确包含要加载的文件夹是可行的 config.autoload_paths += %W(#{config.root}/lib/search)

    我认为我们缺少一些语法。另一件事是,如果您不想弄乱 application.rb 文件,请使用该文件,如果我记得的话,它会从 lib 文件夹中获取文件路径,例如:search/host_search

    【讨论】:

      【解决方案2】:

      我认为如果您将HostSearch 模块放在搜索子目录下(即在lib/search/host_search.rb 中),那么您需要为其命名:

      module Search
        module HostSearch
        end
      end
      

      如果你不想给它命名,你可以将文件移动到 lib 根目录:lib/host_search.rb

      另请参阅:https://stackoverflow.com/a/19650564/514483

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-17
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 2021-07-05
        相关资源
        最近更新 更多