2010-04-05 9 views
7

W moim pliku application_helper.rb Mam funkcję tak:Szyny: w jaki sposób uzyskać dostęp do obiektu żądania poza pomocnikiem lub kontrolerem?

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

Funkcja ta jest potrzebna w kontrolery, modele i widoki. Dlatego umieściłem ten kod w pliku funkcji narzędzia w katalogu lib/. Nie zadziałało to jednak: nie udało mi się ustalić skarg na temat request.

Jak uzyskać dostęp do obiektu request w pliku w katalogu lib/?

+0

Kwestia dotyczy tylko umieszczania kodu w miejscu. Mam funkcję, która używa obiektu żądania. Ta funkcja jest używana w widokach i kontrolerach. Mogę zduplikować kod w obu miejscach, ale wydaje się czystszy, aby umieścić kod w katalogu lib /, tak aby zarówno widoki, jak i kontrolery mogły uzyskać dostęp do pojedynczej funkcji. – rlandster

+0

Twoje pytanie było już moją odpowiedzią ... Dostęp do obiektu żądania można uzyskać od pomocnika. ;-) – hurikhan77

Odpowiedz

2

Najprostszą rzeczą, która wydaje się działać tutaj, jest przekazanie obiektu żądania do metody.

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

Założeniem jest, gdy kiedykolwiek ta metoda jest nazywana wniosek został złożony, a które można przekazać je do metody.

Próbuję wymyślić scenariusz, w którym model musiałby bezpośrednio wywołać tę metodę. Wydaje się bardziej prawdopodobne, że możesz chcieć sprawdzić, czy jest to internal_request w twoim kontrolerze (oznacz go jako helper_method w twoim kontrolerze, jeśli potrzebujesz tego w swoim widoku), a następnie powiedz swojemu modelowi, że jest to internal_request.