作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想在一个模块中创建一个方法(出于分组原因),它可以作为 module.method
调用,如下所示:
helpers do
module UserSession
def logged_in?
not session[:email].nil?
end
def logout!
session[:email] = nil
end
end
end
但是当我尝试使用 UserSession.logged_in?
调用它时,它说 logged_in 不是 UserSession 的方法
undefined method `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
它给出了一个错误,我无法访问 session
变量
undefined local variable or method `session' for UserSession:Module
这个问题的最佳解决方案是什么?
最佳答案
您可以对 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
模块定义当然可以在另一个(require
d)文件中。
在幕后,helpers <Module>
正在做 include
, 而不是简单地进入您正在为您的应用程序使用的 Sinatra 应用程序子类。 include
需要与 get
兼容, post
等施展魔法,helpers
为你做。
关于ruby - 如何在 Sinatra 中制作模块化助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18352283/
我是一名优秀的程序员,十分优秀!