gpt4 book ai didi

ruby-on-rails - Rails 是否提供请求上下文?

转载 作者:行者123 更新时间:2023-12-05 06:26:22 25 4
gpt4 key购买 nike

我是 Rails 的新手,我想弄清楚 Rails 是否有一个请求上下文,我可以在其中存储变量并在请求的上下文中访问它们?我正在使用 Rails 4.2.11。

我试过在

中有一个前置过滤器
class ApplicationController < ActionController::Base
before_action :set_request_context

def set_request_context
Thread.current[:request_context] = {:correlation_id => "some_unique_id"}
end
end

然后我在代码的其他地方访问这个变量。我确定这不是正确的方法,因为应用程序在 ngnix 上运行,它可能无法保证请求将始终由单个线程提供服务。

当在映射 Controller 的方法中处理请求时,将实例化一个需要访问此 request_context 的类的新对象。

class CreditCardPaymentsController < ApplicationController
def new
@paypage_id=PaypageIdRequest.new(:merchant_id => merchant_id)
end
end

在 PaypageIdRequest 类的方法中,我需要访问我在 :request_context 中设置的 correlation_id。请注意,我不能在初始化时将变量发送到 PaypageIdRequest 类,因为有太多地方我必须发送这个变量,考虑到面向方面的编程,在所有地方发送它是不好的做法。

最佳答案

在 Rails(和一般的 Rack 应用程序)中,您有 env,它是一个包含 request object 的类似散列的对象。 . env 被像 Warden 这样的中间件用来将自己注入(inject)到你的应用程序中。

但这不是全局性的。它在路由、 Controller 和 View 中可用,但在不了解请求的模型中不可用,除非您传递它,否则它在您添加到 MVC 模型(如服务对象或装饰器)的任何其他内容上也不可用。

如果您希望它在您的 PaypageIdRequest 类中可用,您需要使用构造函数或方法注入(inject),或者将您正在保存的任何内容设为全局。

关于ruby-on-rails - Rails 是否提供请求上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56199961/

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