2012-10-13 116 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