2010-04-05 4 views
7

Nel mio file application_helper.rb Ho una funzione come questa:Rails: come posso accedere all'oggetto richiesta all'esterno di un helper o controller?

def internal_request? 
    server_name = request.env['SERVER_NAME'] 
    [plus more code...] 
end 

Questa funzione è necessaria nel controller, modelli e punti di vista. Quindi, ho inserito questo codice in un file di funzione di utilità nella directory lib/. Tuttavia, questo non ha funzionato: ho ricevuto lamentele su request non definito.

Come accedere all'oggetto request in un file nella directory lib/?

+0

Il problema è più di mettere il codice in un posto solo. Ho una funzione che utilizza l'oggetto richiesta. Questa funzione è utilizzata nelle viste e nei controller. Posso duplicare il codice in entrambi i posti, ma sembra più pulito inserire il codice nella cartella lib/in modo che sia le viste che i controller possano accedere alla singola funzione. – rlandster

+0

La tua domanda era già la mia risposta ... L'oggetto richiesta è accessibile da un helper. ;-) – hurikhan77

risposta

2

La cosa più semplice che sembra funzionare qui è passare l'oggetto richiesta al metodo.

def internal_request?(request) 
server_name = request.env['SERVER_NAME'] 
[plus more code...] 
end 

Il presupposto è quando mai questo metodo viene chiamato una richiesta è stata fatta, e che è possibile passare al metodo.

Sto cercando di pensare a uno scenario in cui un modello dovrebbe chiamare direttamente questo metodo. Sembra più probabile che tu voglia controllare se si trattasse di una richiesta interna nel tuo controller (contrassegnala come helper_method nel tuo controller se ne hai bisogno nella tua vista), e poi dì al tuo modello che era una richiesta interna.