gpt4 book ai didi

ruby-on-rails - rails : share information within a Request scope

转载 作者:行者123 更新时间:2023-12-03 16:04:52 25 4
gpt4 key购买 nike

Rails 中在当前请求范围内共享信息的机制是什么?

熟悉 Asp.Net 的人会知道有一个 HttpContext 可供在请求期间调用的所有实体使用。

Rails 中有类似的东西吗?

最佳答案

around_filterThread.current[]您可以轻松创建请求上下文/范围。请参阅以下示例。

首先添加您的application_controller.rb :

  around_filter :request_context

def request_context
begin
RequestContext.begin_request
yield
ensure
RequestContext.end_request
end
end

现在将以下类添加到 lib/request_context.rb
class RequestContext
def self.instance
i = Thread.current[:request_context]
unless i
raise "No instance present. In script/rakefiles: use RequestContext.with_scope {}, " +
"in controller: ensure `around_filter :request_scope` is configured"
end
return i
end

# Allows the use of this scope from rake/scripts
# ContextScope.with_scope do |scope|
# # do something
# ...
# end
def self.with_scope
begin
begin_request
yield(instance)
ensure
end_request
end
end

def self.begin_request
raise "request_context already set" if Thread.current[:request_context]
Thread.current[:request_context] = RequestContext.new
end

def self.end_request
raise "request_context already nil" unless Thread.current[:request_context]
Thread.current[:request_context] = nil
end

# user part, add constructors/getters/setters here

def initialize
# you can setup stuff here, be aware that this
# is being called in _every_ request.
end
end

这很简单。您可以将数据存储在 RequestContext.instance 对象中,该对象将在每次请求后重新创建。

关于ruby-on-rails - rails : share information within a Request scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7323792/

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