2013-10-02 18 views
12

È possibile reindirizzare all'URL di riferimento con un nuovo parametro nella stringa di query?rails 4 reindirizzamento con nuovi parametri

qualcosa di simile:

redirect_to :back, custom_param='foo' 
+0

quando si dice ': indietro' si intende indietro da dove l'utente proviene o un'azione denominata' back? ' – tihom

+0

il primo ==>: indietro – user1066183

+0

modificato la domanda per rendere il significato più chiaro. – tihom

risposta

5

si può mettere in sessione e quindi reindirizzare indietro

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

perché dovrebbe funzionare ?? – user1066183

+0

Quando si utilizza la sessione, i valori nella sessione rimangono lì tra le richieste. – techvineet

+1

sì, ma ho bisogno di mettere i parametri nel link, ho bisogno di alcuni come questo: http: // localhost: 3000 /? Locale = 'pt' – user1066183

5

Prova questo:

# 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

Un gotcha qui. 'Rack :: Utils.parse_nested_query (referrer_url.query)' restituisce un hash con chiavi stringificate. Quindi se il tuo 'referrer_url' ha' cp = bar' come sua stringa di query corrente. La query dell'URL sarà: 'cp = bar & cp = foo'. Modificare 'Rack :: Utils.parse_nested_query (referrer_url.query)' in 'Rack :: Utils.parse_nested_query (referrer_url.query) .symbolize_keys' o' Rack :: Utils.parse_nested_query (referrer_url.query) .stringify_keys' secondo necessità – DickieBoy

1

Un altro approccio potrebbe essere quello di passare attraverso "flash" (scompare automaticamente dopo la richiesta di reindirizzamento):

Tuttavia, come notato da uno dei miei colleghi, un modo migliore è probabilmente di restituirlo come parametro di query, per mantenerlo stateless e distinguere i due URL. Sembra che non ci sia un bel modo Rails integrato per farlo, il che mi fa chiedere che cos'altro ha torto in questo approccio.

Problemi correlati