在路由

时间:2016-03-18 21:02:34

标签: ruby session scope sinatra

在我的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)也是如此实际上并没有改变会话。我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

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

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

当您致电SessionEditing.setup时,您正在调用模块方法.setup,这就是您需要使用self定义方法的原因,因为它将setup定义为类方法。