2009-07-22 7 views
17

Ich kann nicht herausfinden, warum meine Flash-Nachrichten nach einem redirect_to verschwinden. Starte den Debugger aus meiner Sicht, und die Flash-Variable ist komplett leer.Rails, Flash verlieren nach redirect_to

flash 
=> {} 

Das Ergebnis ist das gleiche mit flash.now ... Es funktioniert gut, wenn ich etwas bearbeite und render rufe.

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 

Anwendung Layout:

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

root_url ist ein weiterer Controller und Aktion.

+0

Verwenden Sie Rails 2.3.2? –

+0

und können Sie den Code für den root_url-Controller/die Aktion, auf die Sie weiterleiten, posten? –

Antwort

4

Es war das render_component Plugin ... es bricht Schienen 2.3.2. Danke trotzdem.

+1

Ich löste dieses Problem, indem ich zwei Zeilen im Code render_component auskommentierte - die Zeile mit flash.discard und flash.sweep. Ich weiß nicht, ob das die richtige Lösung war, aber ich kann jetzt weitermachen. – Mario

+0

Hallo, ich habe auch das gleiche Problem hier und klebte für einen halben Tag. Ich blitze auf diese Weise 'redirect_to new_user_session_url (Subdomain: @ account_subdomain), notice: I18n.t ('accounts.create.success_confirmation ') 'und ich verliere meine Nachricht auf den Sitzungen/neuen Seiten. Wenn ich jedoch auf dem Controller debugge, sehe ich das Flash-Objekt mit dem Benachrichtigungsschlüssel und -wert. Könnten Sie mehr über render_component tun, was Sie getan haben? –

1

, wenn Sie zu einer anderen Aktion verwenden Flash-Umleitung und wenn Sie auf gleiche Aktion Nutzung sind machen flash.now

24

Wenn Sie den Flash-Mitteilungen-Funktion verwenden, gibt es zwei Möglichkeiten zum Anzeigen von Nachrichten:

sofort auf der gleichen Seite zu laden und zugänglich in der Ansicht von flash['foo']:

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

Oder auf einer Umleitung zu einer anderen Seite und zugänglich von flash['notice']:

redirect_to root_url, notice: "Hello world" 

Die Ruby on Rails führt Website ist eine wirklich gute Referenz:

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

1

Mein Flash-Rendering nicht für root_url Arbeit wurde wegen meiner Routing. Ich hatte die root_url umgeleitet wie root: to => redirect ('[SOME_OTHER_PAGE]'). Stattdessen verwende ich redirect_to zu einer anderen Ressource

7

Wenn Sie eine doppelte Umleitung verwenden (z. B. Redirect zu root, die dann an Benutzer umleitet), müssen Sie den Blitz weiterleiten.

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

def second_redirect_action 
    redirect_to current_user, flash: flash 
end 
4

Ich lief in dieser Frage auch in Rails 4, und nach meinem Kopf gegen meinen Computer für eine Weile hämmern, bemerkte ich dies in den Rails-Protokolle: Can't verify CSRF token authenticity.

Es stellte sich heraus, dass ich über ein Formular einreichte, das kein CSRF-Token enthielt. Überraschenderweise rief es immer noch meine Controller-Methode an und machte immer noch die Umleitung, aber das war es, was alles wegwarf.

Hinzufügen eines CSRF-Tokens zu meinem Formular repariert es.