2012-03-29 5 views
7

Ho appena creato un modulo location.rb all'interno della cartella /lib con seguente contenuto:Come utilizzare moduli in applicazioni Rails

module Location 
    def self.my_zipcode() 
    zip_code = "11215" 
    end 
end 

E ora nel mio controller che sto cercando di chiamare "my_zipcode" metodo:

class DirectoryController < ApplicationController 
    def search 
    require 'location' 
    zip_code = Location.my_zipcode() 
    end 
end 

Ma genera un errore:

undefined method `my_zipcode' for Location:Module

+0

Prova 'Location :: my_zipcode'. –

+0

Ancora lo stesso errore. –

+0

Funziona per me (ed è quello che dovrebbe). –

risposta

5

Potrebbe essere necessario riavviare il server di rotaie affinché riconosca elementi nella directory lib.

+1

sai se devo riavviare un server ogni volta che aggiorno un codice modulo? –

+0

è quello che di solito devo fare, non sono sicuro di come aggirarlo –

+2

Di solito aggiungo una cartella app/moduli per inserirli mentre si sviluppa. In questo modo vengono ricaricati su ogni richiesta. –

13

È inoltre possibile aggiungere il seguente al vostro config/application.rb

config.autoload_paths + =% W (# {config.root}/lib)

e dovrebbe caricare automaticamente il modulo, senza dover per riavviare le guide.

+0

Grazie outside2344, soluzione molto bella :) –