2013-10-02 14 views
12

Czy możliwe jest przekierowanie z powrotem do adresu URL z nowym parametrem w ciągu zapytania?szyny 4 przekierowanie z powrotem z nowymi parametrami

coś takiego:

redirect_to :back, custom_param='foo' 
+0

Kiedy mówisz ': powrót' masz na myśli powrót do miejsca, z którego przybył użytkownik lub do akcji o nazwie' powrót? ' – tihom

+0

pierwsza osoba ==> cofnęła – user1066183

+0

zredagowała pytanie, aby wyjaśnić znaczenie. – tihom

Odpowiedz

5

Można umieścić go w sesji, a następnie przekierować z powrotem

session[:somekey] = value 
redirect_to :back 
+0

dlaczego to powinno działać? – user1066183

+0

Podczas korzystania z sesji wartości w sesji pozostają tam między żądaniami. – techvineet

+1

tak, ale muszę umieścić params w łączu, potrzebuję trochę tak: http: // localhost: 3000 /? Locale = 'pt' – user1066183

5

Spróbuj tego:

# get a URI object for referring url 
referrer_url = URI.parse(request.referrer) rescue URI.parse(some_default_url) 
        # need to have a default in case referrer is not given 


# append the query string to the referrer url 
referrer_url.query = Rack::Utils.parse_nested_query(referrer_url.query). 
        # referrer_url.query returns the existing query string => "f=b" 
        # Rack::Utils.parse_nested_query converts query string to hash => {f: "b"} 
        merge({cp: 'foo'}). 
        # merge appends or overwrites the new parameter => {f: "b", cp: :foo'} 
        to_query 
        # to_query converts hash back to query string => "f=b&cp=foo" 



# redirect to the referrer url with the modified query string 
redirect_to referrer_url.to_s 
        # to_s converts the URI object to url string 
+0

Jeden tu jest. 'Rack :: Utils.parse_nested_query (referrer_url.query)' zwraca skrót z uszeregowanymi kluczami. Więc jeśli twój 'referrer_url' ma' cp = bar' jako bieżący ciąg zapytania. Zapytaniem adresu URL będzie: 'cp = bar & cp = foo'. Zmień 'Rack :: Utils.parse_nested_query (referrer_url.query)' na 'Rack :: Utils.parse_nested_query (referrer_url.query) .symbolize_keys. 'Lub' Rack :: Utils.parse_nested_query (referrer_url.query) .stringify_keys' w razie potrzeby – DickieBoy

1

Innym rozwiązaniem mogłoby być przekazać go za pośrednictwem "flash" (znika automatycznie po żądaniu przekierowania):

flash[:somekey] = 'some value' 
redirect_to :back 

Jednak, jak zauważył jeden z moich współpracowników, lepszym sposobem jest prawdopodobnie zwrócenie go jako parametru zapytania, aby zachować status bezpaństwowy i rozróżnić dwa adresy URL. Wydaje się, że nie ma w tym fajnego, wbudowanego Railsa, co sprawia, że ​​zastanawiam się, co jeszcze jest nie tak z tym podejściem.