我在Trinidad服务器上使用JRuby(最新的,1.7 RC2)/ Sinatra混合,以获取背景信息。
get "/" do
@user = session[:user] || [3,2]
puts session[:user]
haml :home
end
get "/signed_in" do
"#{session[:loggedin]}"
end
post "/signup" do
user = User.create(:username => params[:username], :password => Digest::SHA1.hexdigest(params[:password]))
session[:user] = user
session[:loggedin] = true
puts session[:user]
end'
我期望的输出是(带注释):
# blank line
#<User:0x4049839a>
#<User:0x4049839a>
但我真正得到的是:
# blank line
#<User:0x4049839a>
# blank line
在帖子之后,/signed_in
仍然没有输出值,当它真的应该是true
时。
为什么不保留这些价值?不,我没有使用霰弹枪,我确实启用了会话,而且我确实设置了会话密钥。
答案 0 :(得分:1)
您无法将DataMapper资源保留在会话变量中。而是将密钥放入会话变量中的用户对象,并使用before帮助程序设置@user = User.first(session[:user])
并在整个应用程序中使用@user
实例变量
此外,您不需要session[:loggedin]
条目,只需使用@user.nil?