Raíles: agregar parámetros de consulta a una URL existente

Tengo un método de controlador de aplicación llamado redireccionar hacia atrás o predeterminado que se usa para redirigir a los usuarios a la página que estaban solicitando después de iniciar sesión

def redirect_back_or_default(default)
  redirect_to(session[:return_to] || default)      
  session[:return_to] = nil
end

Me gustaría poder agregar opcionalmente parámetros de URL (para algún seguimiento de análisis) a la URL, pero no estoy seguro de cuál es la mejor manera. Me gustaría cambiar la firma del método a esto

def redirect_back_or_default(default, params=nil)
  redirect_to(session[:return_to] || default)      
  session[:return_to] = nil
end

y de alguna manera adjuntar los parámetros a la URL existente. ¿Existe una forma estándar de rubí o ROR de hacer esto? Obviamente, podría verificar la fuerza bruta para ver si hay una cadena de consulta como parte de la URL con expresiones regulares y construir manualmente la cadena de consulta, pero esperaba que hubiera una forma estándar más fácil de hacer esto.

preguntado el 10 de mayo de 11 a las 13:05

2 Respuestas

Desde aquí:

Para pasar parámetros con redirect_to, simplemente agréguelos. Como ...

 redirect_to :controller => 'another', :action => 'def', :param1 => 'some', :param2 => 'thing', :param => 'else'

contestado el 10 de mayo de 11 a las 17:05

Eso no funciona porque las URL ya están creadas en este punto. John

Lo intenté redirect_to( (session[:return_to] || default), :test_param=>1 ) - John

Bueno entonces session[:return_to] y default contener URL completas? - Rachel Shallit

Correcto, porque estoy guardando la uri de solicitud a la que estaban navegando antes de ingresar a la página que requiere un inicio de sesión. Luego, después de iniciar sesión, son redirigidos a la sesión [: return_to]. - John

Por lo que puedo decir, no hay una forma incorporada de hacer lo que quieres. La documentación dice "Cadena que comienza con protocolo: // (como http: //): se transmite directamente como destino de la redirección". - Rachel Shallit

enfoque estándar

def redirect_to_back_or_default(default = "/")
  back = case request.env["HTTP_REFERER"]
  when request.fullpath
    default
  when nil
    default
  else
    :back
  end
  redirect_to back
end

contestado el 10 de mayo de 11 a las 17:05

Eso todavía no me ayuda a agregar un parámetro adicional a "back" - John

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.