在Heroku上的Sinatra:无法设置会话变量为零
问题描述:
我目前在学习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
所以,如果我称之为“送分调度研究”的路线,它重定向我到“操作”路线,并显示会话[:消息]变量。如果我刷新“操作”页面,则应该不会有任何消息,因为上一条消息已设置为零。但它仍显示“操作完成!”每次我打电话给“操作”路线。难道我做错了什么?
感谢您的阅读!
答
您应该使用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]
希望帮助!
编辑:
啊,对不起......我其实没有回答这个问题。 session [:message] = nil在输出消息后被调用。所以它从来没有真正达到这个声明。 – SeanNieuwoudt 2011-12-16 20:44:32