2010-10-26 14 views
6

Ho aggiornato a Rails 2.3.10, Rack 1.2.1 e ora nessuno dei miei messaggi flash è visibile. Ho scoperto che nel corso di un reindirizzamento l'avviso viene passato come questoAvviso flash con redirect_to è rotto nei binari

redirect_to(@user, :notice => "Sorry there was an error") 

E a mio avviso l'hash flash è vuota

<%= debug flash %> 
!map:ActionController::Flash::FlashHash {} 

Ma si può vedere il messaggio nel controller. Cosa dà?

 <%= debug controller.session %> 
     session{:home_zip=>"94108", :session_id=>"xxx", :flash=>{:notice=>"Sorry there was an error"}, :user_credentials=>"1baf9c9c0423ce0151ec32e24cc422f07309e4ba503eb4830635ecc115da217809997324374bb273b3fb792895c9741a8b8c9ea4267771a1bd149de5b9179ea0", :user_credentials_id=>22, :home_market_id=>11} 
     Edit Profile  

risposta

1

Ci siamo appena imbattuti anche in questo. Tutti i nostri messaggi flash scompaiono con il reindirizzamento, ma non quando sono impostati nel controller in modo esplicito.

non funziona:

def create 
    if @obj.save 
     flash[:notice] = "The #{cname.humanize.downcase} has been created." 
     redirect_back_or_default redirect_url 
    else 
     render :action => 'new' 
    end 
    end 

Questo funziona:

def show 
    @user = current_user 
    flash[:notice] = "Hello -- this will show up fine" 
    end 
4

Hai controllato il bug tracker dei binari? Uso ancora il setter vecchio stile flash[:notice] = message e funziona perfettamente, quindi sembra che sia un problema di metodo redirect_to.

https://rails.lighthouseapp.com/

Hai provato redirect_to url, :flash => { :notice => "notice" }, come un lavoro in giro?

+0

Grazie ma ho provato anche quello, ma sembra che il metodo flash chiamato dalla vista sia rotto. – jspooner

1

Questo potrebbe essere un problema con i cookie. Per farla breve, i cookie non vengono visualizzati se si reindirizza immediatamente dopo. Supponendo che Rails implementa flash utilizzando i cookie, il reindirizzamento rappresenta il tuo problema.

Fonti:

http://persistall.com/archive/2008/01/25/cookies--redirects--nightmares.aspx http://stackoverflow.com/questions/1621499/why-cant-i-set-a-cookie-and-redirect

4

Il seguente codice dovrebbe funzionare:

redirect_to(@user, {:notice => "Sorry there was an error"})

sto indovinando questo è dovuto alle variazioni di Ruby e non in Rails, perché sembra un token di modifica prioritaria l'analisi nel compilatore.

+0

+1, questo ha funzionato come un fascino per me. – Joe

+3

non ha funzionato per me –

+1

Ha funzionato per me, nel mio caso era un 'model_path model' prima del flash che stava causando il problema. – mtrovo