在我的sinatra应用程序中,我想创建一些操作会话的方法。我想在模块中声明所有这些方法,并在任何路由之外使用该模块。例如:
enable :sessions
module SessionEditing
def setup
session[:value] = "something"
end
end
get "/" do
SessionEditing.setup
redirect "/test"
end
get "/otherRoute" do
SessionEditing.setup
redirect "/test"
end
get "/test"
puts session[:value] #=> "something"
end
我认为可能有办法提升session
的范围,但我还没有找到方法。我还了解到,将session
传递给方法并不起作用,因为您无法将其设置回来,即使该方法返回新的session
设置session = SessionEditing.setup(session)
也是如此实际上并没有改变会话。我怎样才能让它发挥作用?
答案 0 :(得分:1)
调用SessionEditing.setup(session)
将允许您修改会话。问题是`SessionEditing实现不正确。尝试:
module SessionEditing
def self.setup
session[:value] = "something"
end
end
当您致电SessionEditing.setup
时,您正在调用模块方法.setup
,这就是您需要使用self
定义方法的原因,因为它将setup
定义为类方法。