2011-09-15 25 views
27

我在我的控制下:顯信息不靈

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

在我看來,我有

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

但閃光燈消息未出現。

但是,如果我做的控制器

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

它的工作如下。 第一個不起作用的原因是什麼?

+0

'signup_path'和'signin_path'是否有所不同? –

+1

我糾正了錯誤。它應該讀signin_path – chell

回答

37

做一些tail'ing上你的日誌並且在渲染之前查看你是否被重定向到多個動作。如果你是這樣的話,很可能是因爲flash沒有被保存足夠長的時間才能使它看到它最終呈現的視圖。

一個妥善放置flash.keep(:notice)應該做的伎倆。

很久以後編輯:此外,現在回想起來,如果你重定向,很多時候,我強烈建議你做一些重構,並通過在更高層次上整合您重定向邏輯消除任何不必要的跳躍,讓您的重定向是預定的並且僅發生一次,最多兩次。

+1

不知道這件事。輝煌尋找伴侶。 –

+2

請查看[here](http://guides.rubyonrails.org/action_controller_overview.html)以獲取關於此的導軌指南。 'flash.keep'應該轉到中間控制器。也就是說,如果你有'蘋果redirect_to樹redirects_to地面'它應該進入'樹'控制器行動發生第二次重定向 – MrWater

+1

另外請注意,只使用'flash.keep'沒有任何參數將保持*整個*閃。 –

0

最好的辦法是寫的意見/佈局/ application.html.erb文件中的這些行

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

,寫

在控制器layout 'application'

+0

我欣賞這個建議。任何想法爲什麼我寫的第一行不起作用? – chell

+0

不知道爲什麼這是downvoted,因爲它的工作,所以這裏是一個+1 – Thilo

+0

這讓我超過我自己的問題,我需要通過我的自定義樣式表處理通知。 – Snips

6

簡單而有效:

修改ApplicationController中<的ActionController :: Base的如下:

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

完全救了我! –

0

在你的控制器使用方法:

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

在您的應用程序佈局使用:

<%= notice %>