我正在学习Sinatra,我似乎无法将会话变量设置为nil ...我已经搜索了几个小时,但它无法正常工作。奇怪的是它在我的机器上本地工作,但它不适用于Heroku。简而言之,我的代码如下所示:
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
因此,如果我调用“send-opration”路径,它会将我重定向到“operation”路径并显示session [:message]变量。如果我刷新“操作”页面,则不应该有任何消息,因为上一条消息已设置为nil。但它仍显示“操作已完成!”每次我称之为“操作”路线。我做错了吗?
感谢阅读!
答案 0 :(得分: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]
希望有所帮助!
编辑: