【发布时间】:2017-05-20 20:52:11
【问题描述】:
只是想知道会话的范围是否可以在自定义对象中进行管理。尝试在用户的方法中设置会话变量时出现以下错误:
undefined local variable or method `session' for #<User:0x007fd6f4117ba0>
file: user.rb location: log_in line: 315
如果能够在方法而不是路由中折腾会话管理,那就太好了。使用 Sinatra 的会话:
enable :sessions
【问题讨论】:
-
我很想知道更好的解决方案,但作为一种解决方法,您可以将
method(:session)作为参数传递,然后传递.call -
@maxple 你的技巧对简单地将
session对象作为参数传递有什么好处? -
@To마SE 在这种情况下你是对的,但对于像
render这样的其他东西不起作用 -
本质上,它对滚动你自己的会话嗅探是开放的。 Sinatra 应该提供这一点。 2.0中没有提及。我还在调查这件事。我是 Ruby 新手。
-
将会话对象传递给方法是您的选择吗?
sessions不可用的原因是方法不保留执行环境(ala lambda/closure),添加此类功能可能会导致比它解决的问题更多的问题。但如果你认为它应该以某种形式存在,请在 github.com/sinatra/sinatra/issues 上打开一个功能请求。
标签: ruby class session sinatra