2011-12-16 81 views
0

我目前在學習Sinatra,而且我似乎無法設置會話變量爲零...我一直在尋找幾個小時,而且它只是不起作用。奇怪的是,它在我的機器上本地工作,但它不適用於Heroku。總之,我的代碼如下所示:在Heroku上的Sinatra:無法設置會話變量爲零

configure :production do 
    enable :sessions 
    set :session_secret, ENV['SESSION_KEY'] || 'whatever' 
end 

post '/send-operation/?' do 
    session[:message] = 'Operation completed!' 
    redirect '/operation/' 
end 

get '/operation/?' do 
    if(session[:message]) 
     "The message is: #{session[:message]}." 
     session[:message] = nil 
    end 
end 

所以,如果我稱之爲「送分調度研究」的路線,它重定向我到「操作」路線,並顯示會話[:消息]變量。如果我刷新「操作」頁面,則應該不會有任何消息,因爲上一條消息已設置爲零。但它仍顯示「操作完成!」每次我打電話給「操作」路線。難道我做錯了什麼?

感謝您的閱讀!

回答

1

您應該使用rack-flash而不是直接用於設置狀態消息的會話。閃光項目將在每次請求後自動刪除。

在你的控制器:

flash[:error] = <your message> 

我用HAML我的模板,所以這是它的樣子:

- if !flash[:error].blank? then 
    %p{ :class => "error" }= flash[:error]    
- if !flash[:notice].blank? then 
    %p{ :class => "notice" }= flash[:notice] 

希望幫助!

編輯:

而且看看sinatra-redirect-with-flash

+0

啊,對不起......我其實沒有回答這個問題。 session [:message] = nil在輸出消息後被調用。所以它從來沒有真正達到這個聲明。 – SeanNieuwoudt 2011-12-16 20:44:32