ruby on rails - rails - Redirige y levanta el mensaje flash cuando todo está en las rutas
routes rails examples (2)
Puedo redirigir todas las direcciones urls (inválidas) usando esta línea al final del archivo de rutas :
match ''*a'' => redirect(''/'')
Me gustaría hacer la redirección y pasar un mensaje de alerta en routes.rb
.
Algo así como (la sintaxis es incorrecta aquí):
match ''*a'' => redirect(''/''), :alert => "aaargh, you don''t want to go to #{params[:a]}"
¿Es posible hacer esto?
Si estuviera haciendo esto en una vista / controlador, podría usar redirect_to
y pasar un mensaje flash en la página redirigida (vea ejemplos en redirigir en los documentos ). Crear un nuevo método de controlador y redirigir allí funcionaría, pero parece poco elegante ... ¿es la forma recomendada?
Lo mejor que puedo hacer es:
match ''PATH'' => redirect { |p, req| req.flash[:alert] = "MESSAGE"; ''/'' }
Un ligero ajuste en la respuesta de Jun me permitió hacer esto:
match ''*a'' => redirect { |p, req| req.flash[:error] = "aaargh, you don''t want to go to #{p[:a]}"; ''/'' }
Que redirige las páginas inválidas a ''/''
junto con el mensaje deseado (dinámico).
Si va a www.your_website/a_bad_place
esto pasa el mensaje en ''/''
:
aaargh, no quieres ir a
a_bad_place
.
Puedes agarrar la url offending (inválida) completa al usar:
#{req.env["HTTP_HOST"]}#{req.env["REQUEST_PATH"]}
y mostrarlo con esto:
match ''*a'' => redirect { |p, req| req.flash[:error] = "aaargh, you don''t want to go to #{req.env["HTTP_HOST"]}#{req.env["REQUEST_PATH"]}"; ''/'' }
y verás:
aaargh, no quieres ir a
www.yourwebsite/a_bad_place