2011-09-15 23 views
27

Ho il seguente nel mio controller:Messaggio flash nel reindirizzamento non funziona

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

A mio avviso ho

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

Ma non appare il messaggio flash.

Tuttavia, se faccio la seguente nel controller

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

funziona. Qual è il motivo per cui il primo non funziona?

+0

Sono 'signup_path' e' signin_path' diversi? –

+1

Ho corretto l'errore. Dovevo leggere signin_path – chell

risposta

37

fare qualche tail'ing sul vostro log e vedi se verrai reindirizzato a più azioni prima di eseguire il rendering. Se lo sei, è probabile che il flash non venga tenuto abbastanza a lungo per arrivare alla vista in cui è finalmente visualizzato.

Un ben posizionato flash.keep(:notice) dovrebbe fare il trucco.

Molto modificare in seguito: Inoltre, in retrospettiva, se si sta reindirizzando che molte volte, consiglio vivamente di fare un po 'di refactoring ed eliminare eventuali salti inutili consolidando la logica di reindirizzamento a un livello superiore, in modo che i tuoi reindirizzamenti sono predeterminati e si verificano solo una volta, due volte al massimo.

+1

Non ne avevo idea. Trova il compagno brillante. –

+2

Controlla [qui] (http://guides.rubyonrails.org/action_controller_overview.html) per le guide delle guide su questo. il 'flash.keep' dovrebbe andare al controller intermedio. Cioè, se hai 'mele redirect_to albero che redirects_to ground' dovrebbe andare all'interno dell'azione' tree'controller dove avviene il secondo redirect – MrWater

+1

Inoltre, usando semplicemente 'flash.keep' senza alcun parametro manterrai il * intero * flash . –

0

miglior approccio è quello di scrivere queste righe nel file di views/layout/application.html.erb

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

e scrittura

layout 'application' nei controllori

+0

Apprezzo il consiglio. Qualche idea sul perché la prima riga che ho scritto non funzioni? – chell

+0

Non so perché questo è stato downvoted, dal momento che funziona, quindi ecco un +1 – Thilo

+0

Questo mi ha superato il mio problema, avevo bisogno di gestire l'avviso tramite il mio foglio di stile personalizzato. – Snips

6

semplice, ma efficace:

modificare ApplicationController < ActionController :: Base come segue:

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

Mi ha completamente salvato! –

0

nel vostro uso del controller:

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

Nel vostro utilizzo di layout dell'applicazione:

<%= notice %> 
Problemi correlati