2012-03-12 24 views
10

Quiero pasar los parámetros (un hash) a redirect_to, ¿cómo puedo hacer esto? Por ejemplo:Raíles redirect_to con los parámetros

hash = { :parm1 => "hi", :parm2 => "hi" } 

y quiero redirigir a la página /hello

URL como esta: /hello?parm1=hi&parm2=hi

+3

qué intentarlo? – austinbv

+0

¿A qué controlador y acción pertenece/hello route to? – James

+0

¿No puede simplemente hacer así? redirect_to 'path',: parm1 => "hola",: parm2 => "hola" – AyJay

Respuesta

19

Si usted no tiene una ruta llamada así por/hola a continuación, tendrá que codificar los parámetros en la cadena que pasas al redirect_to.

Pero si tuviera algo así como hello_path entonces se podría utilizar redirect_to hello_path(:param1 => 1, :param2 => 2)

+0

Hola, gracias por su respuesta.Pero el número de parámetros no se conoce, así que no puedo codificarlos ... – ygnhzeus

+1

debería poder pasar todo el hash de params como un argumento a hello_path() y escribirá cada clave, par de valores como un parámetro – xkickflip

+0

@ygnhzeus Es por eso que deberías usar la ruta nombrada. – James

1

simplemente, pasar el hash en una discusión en la URL, y en el código de análisis que salir todos los valores necesarios.

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}" 

Sé que esto puede ser una forma muy básica para hacerlo, pero bueno, voy a conseguir en alguna parte :)

+2

Como ya estamos usando Rails, también podríamos usar el método ['to_param'] (http://apidock.com/rails/Hash/to_param). – JacobEvelyn

0

he utilizado la siguiente función antes:

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 

Ejemplo de uso:

redirect_to add_query_params("/hello", parm1: 'hi', parm2: 'hi') 

Esto tiene la ventaja de preservar cualquier URL existente params la URL puede contener ya.

6

En lugar de:

redirect_to some_params 

Usted puede hacer:

redirect_to url_for(some_params) 

Te estás convirtiendo los parametros en una url con url_for antes de pasarla a redirect_to, así que lo que pasa redirect_to termina siendo una URL como una cadena, a la cual redirect_to se complace de redireccionar.

Nota bien: No entiendo por qué redirect_to se niega a usar params. Solía ​​estar dispuesto a usar params. En algunos puntos, alguien agregó algo a Rails para prohibirlo. Me hace sospechar que existen razones de seguridad para hacerlo, y si es así, estas razones de seguridad podrían significar que hacer manualmente redirect_to url_for(p) también tiene implicaciones de seguridad. Pero aún no he podido encontrar ninguna documentación que explique qué hay aquí.

actualización: he encontrado la advertencia de seguridad, pero no han digerido aún: https://github.com/rails/rails/pull/16170