2009-07-22 15 views
17

No puedo entender por qué mis mensajes flash desaparecen después de redirect_to. Comencé el depurador en mi opinión, y la variable flash está totalmente vacía.Rieles, perdiendo flash después de redirect_to

flash 
=> {} 

El resultado es el mismo con flash.now ... Funciona bien si edito algo y llamo a renderizar.

Controller: Disposición

def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Logged in" 
     redirect_to root_url 
    else 
     render :action => 'new' 
    end 
    end 

Aplicación:

- flash.each do |name, msg| 
    =content_tag :div, msg, :class => "flash_#{name}" 

root_url es otro controlador y la acción.

+0

¿Está utilizando Rails 2.3.2? –

+0

y puede publicar el código para el controlador/acción root_url al que está redirigiendo? –

Respuesta

4

Era el complemento de render_component ... rompe los carriles 2.3.2. Gracias de cualquier manera.

+1

Resolví este problema comentando dos líneas en el código render_component - la línea con flash.discard y flash.sweep. No sé si esta fue la solución correcta, pero me permite avanzar en este momento. – Mario

+0

Hola, también tengo el mismo problema aquí y atrapado por medio día. Estoy destellando de esta manera 'redirect_to new_user_session_url (subdominio: @ cuenta.subdominio), aviso: I18n.t ('accounts.create.success_confirmation ') 'y, estoy perdiendo mi mensaje en las sesiones/página nueva. Sin embargo, cuando depuro en el controlador, veo el objeto flash con la clave y el valor de aviso. Podrías elaborar más sobre lo que harías en el componente render. –

1

si usted es redirigir a otro uso de acción en flash y si estás dad al mismo uso acción flash.now

24

Cuando se utiliza el flash incluyen mensajes, existen dos maneras de mostrar mensajes:

instantáneamente en la misma carga de la página, y accesible en la vista desde flash['foo']:

flash.now['foo'] = "Hello world" 

o en una redirección a otra página, y accesible desde flash['notice']:

redirect_to root_url, notice: "Hello world" 

El rubí en los carriles guía sitio web es una muy buena referencia:

http://guides.rubyonrails.org/action_controller_overview.html#the-flash

1

Mi traducción flash no estaba trabajando para root_url debido a mi enrutamiento. Hice que root_url se redireccionara a otra página, como root: to => redirect ('[SOME_OTHER_PAGE]'). En lugar de esto, simplemente uso redirect_to a otro recurso

7

Si está utilizando una redirección doble (por ejemplo, redirigir a la raíz, que luego redirige al usuario), necesita pasar el flash.

def first_action 
    flash[:notice] = "Logged in" 
    redirect_to root_url 
end 

def second_redirect_action 
    redirect_to current_user, flash: flash 
end 
4

Me acabo de encontrar con este tema también, en los carriles 4, y después de golpearse la cabeza contra mi equipo por un tiempo, me di cuenta de esto en los registros de Rieles: Can't verify CSRF token authenticity.

Resultó que estaba enviando a través de un formulario que no tenía un token CSRF. Sorprendentemente, todavía llamaba a mi método de control y seguía haciendo la redirección, pero esto era lo que estaba tirando todo.

Agregar un token CSRF a mi formulario lo arregló.

Cuestiones relacionadas