Voglio passare i parametri (un hash) a redirect_to
, come fare questo? Per esempio:Rails redirect_to con params
hash = { :parm1 => "hi", :parm2 => "hi" }
e voglio riorientare alla pagina /hello
URL simile a questo: /hello?parm1=hi&parm2=hi
Voglio passare i parametri (un hash) a redirect_to
, come fare questo? Per esempio:Rails redirect_to con params
hash = { :parm1 => "hi", :parm2 => "hi" }
e voglio riorientare alla pagina /hello
URL simile a questo: /hello?parm1=hi&parm2=hi
Se non si dispone di un percorso che prende il nome/ciao allora dovrete hardcode i parametri nella stringa passata a redirect_to
.
Ma se si ha qualcosa di simile hello_path
allora si potrebbe utilizzare redirect_to hello_path(:param1 => 1, :param2 => 2)
Ciao, grazie per la risposta.Ma il numero di parametri non è noto, quindi non riesco a codificarli .. – ygnhzeus
dovresti essere in grado di passare l'intero hash dei parametri come argomento a hello_path() e scriverà ogni chiave, coppia di valori come parametro – xkickflip
@ygnhzeus Ecco perché dovresti usare il percorso indicato. – James
semplicemente, passare l'hash in un argomento nella URL, e nel codice parse a uscire tutti i valori necessari.
param_arr = []
hash.each do |key , val|
param_arr << "#{key}=#{val}"
end
params_str = param_arr.join("&")
redirect_to "http://somesite.com/somepage?#{params_str}"
So che questo potrebbe essere il modo molto semplice per farlo, ma hey, è prendo da qualche parte :)
Dato che stiamo già utilizzando Rails, potremmo usare il metodo ['to_param'] (http://apidock.com/rails/Hash/to_param). – JacobEvelyn
Il modo più semplice (se non è un percorso di nome) sarà:
redirect_to "/hello?#{hash.to_param}"
ho usato la funzione segue prima:
def add_query_params(url, params)
parsed_uri = URI(url)
if parsed_uri.query
query_params = URI.decode_www_form(parsed_uri.query)
else
query_params = []
end
params.each_pair do |k, v|
query_params << [k.to_s, v]
end
parsed_uri.query = URI.encode_www_form(query_params)
parsed_uri.to_s
end
Esempio utilizzo:
redirect_to add_query_params("/hello", parm1: 'hi', parm2: 'hi')
Questo ha il vantaggio di conservare qualsiasi URL esistente params l'URL potrebbe già contenere.
Invece di:
redirect_to some_params
Si può fare:
redirect_to url_for(some_params)
si ruota la params in un'URL con url_for
prima di passarlo al redirect_to
, così che cosa si passa redirect_to
finisce per essere un URL come stringa, a cui redirect_to è felice di reindirizzare.
Nota bene: Non capisco perché redirect_to
rifiuti di utilizzare i parametri. Era solito usare i params. In alcuni punti qualcuno ha aggiunto qualcosa a Rails per vietarlo. Mi viene il sospetto che ci siano ragioni di sicurezza per farlo, e se così fosse, questi motivi di sicurezza potrebbero significare che fare manualmente lo redirect_to url_for(p)
ha implicazioni sulla sicurezza. Ma non sono ancora riuscito a trovare alcuna documentazione che spieghi cosa c'è qui sopra.
aggiornamento: ho trovato l'avviso di protezione, ma non hanno ancora digerito: https://github.com/rails/rails/pull/16170
hai ancora di provare? – austinbv
A quale controller e azione si indirizza/ciao? – James
Non puoi semplicemente fare così? redirect_to 'percorso',: parm1 => "ciao",: parm2 => "ciao" – AyJay