2011-09-15 9 views
27

Tengo el siguiente en mi controlador:Mensaje flash en redirección no funciona

redirect_to signin_path, :notice => "The email is already registered" 

En mi opinión tengo

<%= flash[:notice] if flash[:notice] %> 

Pero no aparece el mensaje flash.

Sin embargo, si hago lo siguiente en el controlador

flash[:notice] = "There is already an acount for this email. Please Login to create your board." 
redirect_to signin_path 

No funciona. ¿Cuál es la razón por la que el primero no funciona?

+0

¿Son 'signup_path' y' signin_path' diferentes? –

+1

Corregí el error. Se suponía que debía leer signin_path – chell

Respuesta

37

¿Algunos tail'ing en sus registros y mira si te están redirigiendo a múltiples acciones antes de renderizar. Si es así, es probable que el flash no se mantenga lo suficiente como para llegar a la vista donde finalmente se renderiza.

Un bien ubicado flash.keep(:notice) debería hacer el truco.

Mucho más tarde editar: Además, en retrospectiva, si está redirigiendo que muchas veces, le recomiendo que hace algo de refactorización y eliminar cualquier saltos innecesarios mediante la consolidación de su lógica de redireccionamiento en un nivel superior, para que sus redirecciones están predeterminados y solo ocurren una vez, dos veces como máximo.

+1

No tenía idea de esto. Brillante encontrar compañero. –

+2

Marque [aquí] (http://guides.rubyonrails.org/action_controller_overview.html) para ver las notas de guías sobre este tema. el 'flash.keep' debe ir al controlador intermedio. Es decir, si tiene 'apples redirect_to tree que redirects_to ground' debería ir dentro de la acción' tree'controller donde ocurre el segundo redireccionamiento – MrWater

+1

También tenga en cuenta que usar 'flash.keep' sin params mantendrá el * entero * flash . –

0

mejor enfoque es escribir estas líneas en el archivo views/layouts/application.html.erb

<%= notice %> 
<%= alert %> 

y escribir

layout 'application' en los controladores

+0

. Agradezco el consejo. ¿Alguna idea de por qué la primera línea que escribí no funciona? – chell

+0

No estoy seguro de por qué esto fue downvoted, ya que funciona, así que aquí está un +1 – Thilo

+0

Esto me ayudó a superar mi propio problema, necesitaba un control del aviso a través de mi hoja de estilo personalizada. – Snips

6

simple, pero efectiva:

modificar ApplicationController < ActionController :: Base de la siguiente manera:

alias :std_redirect_to :redirect_to 
def redirect_to(*args) 
    flash.keep 
    std_redirect_to *args 
end 
+0

¡Totalmente me salvó! –

0

en el uso del controlador:

redirect_to signin_path, :notice => "There is already an acount for this email. Please Login to create your board." 

En su utilización diseño de la aplicación:

<%= notice %> 
Cuestiones relacionadas