2011-12-16 66 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