gpt4 book ai didi

ruby - 如何在 Sinatra 中制作模块化助手

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:50 26 4
gpt4 key购买 nike

我想在一个模块中创建一个方法(出于分组原因),它可以作为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com