2011-03-07 11 views
10

Estoy intentando acceder a una función en un módulo que se encuentra en el directorio lib de mi aplicación. (Lib/search.rb)Acceso al módulo en el directorio lib (Ruby on rails)

De hecho, estoy tratando de obtener el código postal en busca de trabajo a partir de: http://joshhuckabee.com/simple-zip-code-perimeter-search-rails

lib/search.rb

module Search 
    def zip_code_perimeter_search(zip, radius) 
    #code 
    end 
end 

Estoy tratando de llamar a la zip_code_perimeter_search Funciona desde la consola de rieles o desde mi controlador, las dos veces obtengo un método indefinido. ¿Algunas ideas?

Respuesta

15

En la consola/controlador:

include Search 
zip_code_perimeter_search(zip, radius) 

En caso de que no carga automática en Rails 3, en el archivo de configuración/application.rb, usted puede hacer esto:

# Custom directories with classes and modules you want to be autoloadable. 
config.autoload_paths += Dir["#{config.root}/lib/**/"] 
+1

Gracias, yo también tenía que hacer un requieren para lib/búsqueda. Creo que Rails 3 no carga automáticamente lib. –

+0

He editado la respuesta. Si configura la configuración de cargar directorios en su archivo application.rb, no necesitará 'requerir' el archivo. – Shreyas

+0

+1 ¡Muchas gracias! – ecoologic

2

Para llamar a un método de módulo, inclúyalo directamente en una clase y llámelo en la instancia de clase.

Class call_module_method 
    include Search 
end 

Ahora

call_module_method.new.zip_code_perimeter_search(zip, radius) 

evaluará el código dentro método zip_code_perimeter_search(zip, radius)