在路由外部使用会话哈希



在我的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)也不会实际更改会话。我怎样才能让它工作?

调用SessionEditing.setup(session)将允许您修改会话。问题是"会话编辑未正确实现。尝试:

module SessionEditing
  def self.setup
    session[:value] = "something"
  end
end

当你调用SessionEditing.setup时,你正在调用模块方法.setup,这就是为什么你需要用self定义方法,因为它将setup定义为类方法。

最新更新