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

为什么不保留这些值?不,我没有使用shotgun,我确实启用了会话,并且我确实设置了会话密码。

4

1 回答 1

1

您不能将 DataMapper 资源保留在会话变量中。而是将用户对象的密钥放在会话变量中,并使用 before 助手在整个应用程序中设置@user = User.first(session[:user])和使用实例变量@user

此外,您不需要session[:loggedin]输入,只需使用@user.nil?

于 2012-10-17T08:38:54.803 回答