2011-01-13 64 views
2

使用在Passenger中運行的Rails 3.0.3,我們遇到了每個請求都保留最後一個閃存集的問題。Flash消息沒有被清除

def require_user 
    unless current_user 
     store_location 
     flash[:notice] = "You must be logged in to access this page" 
     redirect_to login_url 
     return false 
    end 
end 

但是用戶之後的任何後續請求中已成功地登錄我們仍然得到提示信息持續,但:例如,如果用戶需要在過濾前先登錄我們設定一個閃光消息從不清除整個會話。

在這個例子中,這是我們設置這個消息的唯一地方,我確保只有當用戶沒有登錄時才設置它。事實上,如果我在之後將except塊刷新,然後刪除行和'測試'的Flash消息保留所有後續請求。

如果您在開發環境或生產環境中運行應用程序,就會發生這種情況。

回答

1

我們有一個自定義替代爲Hash#symbolize_keys!這是從一些舊代碼閒逛,看來,當餅乾中間件是呼籲餅乾symbolize_keys!這是造成該請求的結束時重新應用閃光燈。

我懷疑其他人會遇到這個問題,但在我們的情況下,這是問題所在。

0

在每次請求開始時會自動清除Flash消息。

您確定,如果用戶未登錄,您的current_user方法返回nil?

你正在使用什麼庫進行用戶會話管理?設計/ Authlogic或其他?

+0

正如我在我的問題中所說的那樣,這不僅僅是這種方法,這只是一個例子。如果我從該方法中刪除所有內容並將其放入flash [:notice] ='Test',我會得到'Test'。刪除這個,這樣方法中就沒有任何東西,'測試'通知會永遠存在。 – DEfusion 2011-01-13 15:23:39