2011-11-18 9 views
6

estoy actualmente la migración de una aplicación en carriles V2 a V3módulos cativos lib del directorio de carga - constantes sin inicializar - carriles 2 a 3 carriles de actualización

En mi lib/ i tengo algunos módulos en subdirectorios, por ejemplo, i la han lib/search/host_search.rb

con un

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

entonces hay que usarla en un controlador llamado Discovery::HostController < ApplicationController :

def search_results 
    output = HostSearch.do_search(:search_string => @search_string, 
    :page => params[:page], 
    :user => @current_user) 
    #... 
end 

Pero tener consigo:

uninitialized constant Discovery::HostController::HostSearch 

..I trató de poner estas líneas en application.rb pero no funciona ..

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

Respuesta

5

me encontré con que se mueve el módulo a la carpeta de la liberación o la inclusión explícita de la carpeta para cargar trabajó, en su caso config.autoload_paths + =% W (# {config.root}/lib/búsqueda)

Creo que hay som Todo lo sintáctico que nos falta. Otra cosa es que si no quiere meterse con el archivo application.rb, solicite el archivo, que si recuerdo, toma la ruta del archivo desde la carpeta lib, por ejemplo: search/host_search < - verifique eso.

0

Creo que si se pone el módulo HostSearch bajo un subdirectorio de búsqueda, (es decir, en lib/search/host_search.rb), entonces necesita espacio de nombres que:

module Search 
    module HostSearch 
    end 
end 

Si no desea que namespace, puede deberían mueva el archivo a la raíz de lib: lib/host_search.rb.

Ver también: https://stackoverflow.com/a/19650564/514483

Cuestiones relacionadas