2009-10-21 19 views
8

Cuando un usuario no entra en mi aplicación Rails, me gustaría apuntar a una página de restablecimiento de contraseña:link_to() en Rails flash de

flash[:notice] = "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}" 

Sin embargo, no puedo utilizar link_to en un controlador . ¿Cuál es la mejor manera de hacer esto sin mezclar el controlador y la lógica de visualización?

Mi mejor versión es que el flash es el lugar equivocado para hacer esto, pero agradecería cualquier comentario.

Respuesta

9

Creo que la solución más común es pegar un enlace a la página de restablecimiento de contraseña en su formulario de inicio de sesión, por lo que su mensaje flash no tiene que ocuparse de nada. Eso también le permite al usuario solicitar el restablecimiento sin primero haber fallado al iniciar sesión.

Si desea hacerlo en el mensaje flash, debe usar url_for para construir el enlace en lugar de link_to.

Como alternativa, podría representar un mensaje parcial en lugar de difícil de codificar en su controlador.

flash[:error] = render_to_string(:partial => "shared/login_failed_message") 

# in shared/_login_failed_message.html.erb 
<%= "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}" %> 
+0

Gracias - el parcial es exactamente lo que necesitaba. – Grandpa

+1

Creo que esto no funciona (en Rails 3.1) porque se escapó todo el resultado antes de que se procesara. Para que pueda obtener algo así como "Lista guardada a < a href = "/equipos/1 Equipo " > de David Tuite </a >" –

+2

Sólo tiene que añadir método .html_safe a la misma y que debería funcionar. – MarioRicalde

5
flash[:notice] = "Login failed. If you have forgotten your password, you can <a href='#{url_for(reset_path)}'>reset it</a>" 

correcta, link_to es un ayudante de vista. Por favor nosotros una forma más genérica de la construcción del enlace, a la url_for

Cuestiones relacionadas