не могу загрузить модули каталога lib - неинициализированная константа - от rails 2 до rails 3 - PullRequest
6 голосов
/ 18 ноября 2011

В настоящее время я переносю приложение в 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

.. Iпытался поместить эти строки в application.rb, но он не работает ..

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

Ответы [ 2 ]

5 голосов
/ 28 ноября 2011

Я обнаружил, что перемещение модуля в папку lib или явное включение папки для загрузки сработало, в вашем случае config.autoload_paths + =% W (# {config.root} / lib / search)

Я думаю, что есть что-то синтаксическое, чего нам не хватает. Другое дело, что если вы не хотите связываться с файлом application.rb, вам нужен файл, который, если я помню, берет путь к файлу из папки lib, например: search / host_search <- проверьте это. </p>

0 голосов
/ 10 марта 2014

Я думаю, что если вы поместите модуль HostSearch в подкаталог поиска (то есть в lib/search/host_search.rb), тогда вам нужно указать пространство имен:

module Search
  module HostSearch
  end
end

Если вы не хотите использовать пространство именэто, вы можете переместить файл в корень библиотеки: lib/host_search.rb.

См. также: https://stackoverflow.com/a/19650564/514483

...