ruby on rails - rails - Rieles, perdiendo flash después de redirigir a
ruby on rails pdf (6)
No puedo entender por qué desaparecen mis mensajes flash después de un redirect_to. En mi vista, inicié el depurador y la variable flash está totalmente vacía.
flash
=> {}
El resultado es el mismo con flash.now ... Funciona bien si edito algo y llamo render.
Controlador:
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
Diseño de la aplicación:
- flash.each do |name, msg|
=content_tag :div, msg, :class => "flash_#{name}"
root_url es otro controlador y acción.
Cuando utiliza la función de mensajes flash, hay dos formas de mostrar mensajes:
Al instante en la misma página cargue, 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 sitio web de guías de Ruby on Rails es una muy buena referencia:
http://guides.rubyonrails.org/action_controller_overview.html#the-flash
Fue el complemento render_component ... rompe rieles 2.3.2. Gracias de cualquier manera.
Mi representación flash no funcionaba para root_url debido a mi enrutamiento. He redirigido root_url a otra página, como root: to => redirect (''[SOME_OTHER_PAGE]''). En lugar de esto solo uso redirect_to a otro recurso
Si está utilizando una redirección doble (por ejemplo, la redirección a la raíz, que luego redirige al usuario), debe 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
También me encontré con este problema, en Rails 4, y después de golpear mi cabeza contra mi computadora por un tiempo, noté esto en los registros de Rails: Can''t verify CSRF token authenticity
.
Resultó que lo estaba enviando a través de un formulario que no tenía un token CSRF. Sorprendentemente, todavía estaba llamando a mi método de controlador y todavía haciendo la redirección, pero esto era lo que estaba tirando todo.
La adición de un token CSRF a mi formulario lo arregló.
si está redirigido a otra acción, use flash y si está renderizado a la misma acción use flash.now