gpt4 book ai didi

ruby - Padrino Controller 抽象

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:58 25 4
gpt4 key购买 nike

我一直在我的一个项目中尝试 Padrino 框架,有一件事让我很恼火。例如,我只想使用 OmniAuth 实现用户注册过程,并想打破我的请求处理程序( Controller 的操作)以分离方法,如下所示:

get ":provider/callback" do  @user = find_the_user_by_oauth(request)  create_user unless @user  store_user_in_sessionenddef find_the_user_by_oauth(request)  #...enddef store_user_in_session  session[:user_id] = @user.idend

我知道将逻辑推到模型层会更好,但我的问题是,我如何才能打破 Controller 逻辑以分离方法并在它们之间共享信息(例如使用实例变量)。在 Rails 中,我在我的 Controller 的私有(private)范围内创建了这些方法,但在这里我应该扩展 Application 类,因为它会为前面的代码抛出未定义的方法异常。我尝试了 Helpers,但是 helpers 不知道实例变量,所以你应该每次都传递变量。

在 Padrino 中让我的 Controller 操作干净的好方法是什么?

最佳答案

要在 Padrino Controller 中定义一个方法,您可以使用 define_method 而不是 def

对于你的例子,做这样的事情:

Admin.controllers :dummy do

define_method :find_the_user_by_oauth do |request|
request.params["username"]
# ...
end

define_method :store_user_in_session do
session[:user_id] = @user
end

get :test do
@user = find_the_user_by_oauth(request)
create_user unless @user
store_user_in_session()
session.inspect
end

end

Padrino 使用 instance_eval 运行发送到 Admin.controllers 的 block 。有关差异,请参阅此答案 https://stackoverflow.com/a/3171649在 define_method 和 def 之间

关于ruby - Padrino Controller 抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331006/

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