2009-07-22 4 views
17

Je n'arrive pas à comprendre pourquoi mes messages flash disparaissent après une redirection vers. J'ai commencé le débogueur dans ma vue, et la variable flash est totalement vide.Rails, perdant flash après redirect_to

flash 
=> {} 

Le résultat est le même avec flash.now ... Il fonctionne très bien si j'édite quelque chose et appelle render.

Controller:

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 

mise en page d'application:

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

root_url est un autre contrôleur et l'action.

+0

Utilisez-vous Rails 2.3.2? –

+0

et pouvez-vous poster le code pour le contrôleur/action root_url que vous redirigez? –

Répondre

4

C'était le plugin render_component ... il casse les rails 2.3.2. Merci quand même.

+1

J'ai résolu ce problème en commentant deux lignes dans le code render_component - la ligne avec flash.discard et flash.sweep. Je ne sais pas si c'était la bonne solution, mais cela me permet d'aller de l'avant en ce moment. – Mario

+0

Salut, j'ai aussi le même problème ici et coincé pour une demi-journée. Je clignote de cette façon 'redirect_to new_user_session_url (sous-domaine: @ compte.subdomain), notez: I18n.t ('accounts.create.success_confirmation ') 'et, je perds mon message sur les sessions/nouvelle page. Cependant, lorsque je débogue sur le contrôleur, je vois l'objet flash avec la clé de notification et la valeur. Pourriez-vous élaborer davantage sur la chose render_component que vous avez faite. –

1

si vous êtes redirigé vers une autre utilisation d'action flash et si vous êtes rendu à même l'utilisation d'action flash.now

24

Lorsque vous utilisez les messages flash fonctionnalité, il y a deux façons d'afficher les messages:

instantanément sur la même charge de page, et accessible à la vue de flash['foo']:

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

Ou sur une redirection vers une autre page, et accessible à partir flash['notice']:

redirect_to root_url, notice: "Hello world" 

Le rubis sur des rails guides site est une référence très bon:

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

1

Mon rendu flash ne fonctionnait pas pour root_url à cause de mon cheminement. J'avais le root_url redirigé vers une autre page, comme root: to => redirect ('[SOME_OTHER_PAGE]'). Au lieu de cela, j'utilise simplement redirect_to vers une autre ressource

7

Si vous utilisez une double redirection (par exemple, rediriger vers la racine, qui redirige ensuite vers l'utilisateur), vous devez passer le 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

Je viens de croiser cette question aussi, dans Rails 4, et après avoir frappé la tête contre mon ordinateur pendant un certain temps, je remarqué dans les journaux Rails: Can't verify CSRF token authenticity. Il s'est avéré que je soumettais via un formulaire qui n'avait pas de jeton CSRF dedans. Étonnamment, il appelait toujours ma méthode de contrôleur et faisait toujours la redirection, mais c'était ce qui jetait tout. L'ajout d'un jeton CSRF à mon formulaire a permis de corriger ce problème.

Questions connexes