2012-10-13 92 views
1

我在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

为什么这些值不被保存?不,我没有使用霰弹枪,我确实启用了会话,并且设置了会话密钥。

回答

1

您无法将DataMapper资源保存在会话变量中。相反,把钥匙给你的用户对象在会话变量,并使用一个辅助前设置@user = User.first(session[:user])和使用整个应用程序

另外,@user实例变量,你不需要session[:loggedin]项,只需使用@user.nil?

+0

我......从来不知道。我真诚地感谢你。 – Imnotanerd