我使用模块化的Sinatra,使用这些代码
def is_login?
session[:auth_token].nil? # error: undefined variable or method `session`
end
if is_login?
menu['Logout'] = '/logout'
else
menu['Login'] = '/login'
end
get '/logout' do
session[:auth_token] = nil
end
这些代码返回错误undefined local variable or method 'session' for main:Object
,因为会话仅在get
内部工作,如何从外部访问会话哈希?
我已经尝试了另一种方法,即将is_login?
移动到帮助器中并将其作为define_method
移动,以便它可以访问session
,但出现了类似的问题,我无法如果未定义,请致电is_login?
,此处为以下代码:
helpers do
define_method :logged_in? do
session[:access_token].nil?
end
if is_login? # error: undefined method `logged_in?`
menus['Logout'] = '/logout'
else
menus['Login'] = '/login'
end
end
答案 0 :(得分:1)
会话仅在请求的上下文中有意义。因此,在外面使用它(例如在上面给出的if表达式中)将不会成功。
相反,请在请求中使用它。例如
get '/' do
if is_login?
# your code
else
# your code
end
end