2010-10-26 5 views
6

J'ai mis à jour à Rails 2.3.10, Rack 1.2.1 et maintenant aucun de mes messages instantanés n'apparaissent. J'ai constaté que lors d'un redirect l'avis est passé dans comme celui-ciLa notification Flash avec redirect_to est cassée dans les rails

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

Et à mon avis, le hachage flash est vide

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

Mais vous pouvez voir le message dans le contrôleur. Que donne?

 <%= 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  

Répondre

1

Nous venons de rencontrer cela aussi. Tous nos messages flash disparaissent avec la redirection, mais pas lorsqu'ils sont définis explicitement dans le contrôleur.

ne fonctionne pas:

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 

Cela fonctionne:

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

Avez-vous vérifié les rails traqueur de bug? J'utilise toujours l'ancien setter flash[:notice] = message et il fonctionne très bien, donc il semble être un problème de méthode redirect_to.

https://rails.lighthouseapp.com/

Avez-vous essayé redirect_to url, :flash => { :notice => "notice" }, comme un travail autour?

+0

Merci, mais j'ai essayé aussi, mais il semble que la méthode flash qui est appelée à partir de la vue est cassée. – jspooner

1

Cela pourrait être un problème avec les cookies. Longue histoire courte, les cookies ne reçoivent pas si vous redirigez immédiatement après. En supposant que Rails implémente flash en utilisant des cookies, la redirection est votre problème.

Sources:

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

Le code ci-dessous devrait fonctionner:

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

Je devine que cela est dû à des changements de Ruby et non pas dans Rails, parce qu'il ressemble à un changement de priorité d'analyse syntaxique jeton dans le compilateur.

+0

+1, Cela a fonctionné comme un charme pour moi. – Joe

+3

ne fonctionne pas pour moi –

+1

Il a travaillé pour moi, dans mon cas, il était un 'model_path model' avant que le flash qui a été la cause du problème. – mtrovo

Questions connexes