Kok*_*zzu 10 ruby helper sinatra
我想在模块中创建一个方法(用于分组原因),可以将其称为a module.method,如下所示:
helpers do
module UserSession
def logged_in?
not session[:email].nil?
end
def logout!
session[:email] = nil
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用UserSession.logged_in?它调用它时表示logged_in不是UserSession的方法
未定义的方法`logged_in?' for UserSession:Module
当我将方法作为UserSession的方法移动时:
helpers do
module UserSession
def self.logged_in?
not session[:email].nil? # error
end
def self.logout!
session[:email] = nil
end
end
end
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误,我无法访问该session变量
未定义的局部变量或UserSession:Module的方法`session'
什么是这个问题的最佳解决方案?
您可以对该helpers方法使用不同的约定.
module UserSession
def logged_in?
not session[:email].nil?
end
def logout!
session[:email] = nil
end
end
helpers UserSession
get '/foo' do
if logged_in?
'Hello you!'
else
'Do I know you?'
end
end
Run Code Online (Sandbox Code Playgroud)
模块定义当然可以在另一个(required)文件中.
在幕后,helpers <Module>正在做一个include,但不是简单地进入你正在为你的应用程序使用的Sinatra应用程序子类.在include需要进行与兼容性如何get,post工作等的魔术,并helpers不会为你.