ruby-on-rails – Rails:在请求范围内共享信息
发布时间:2020-12-17 02:42:11 所属栏目:百科 来源:网络整理
导读:Rails在当前请求范围内共享信息的机制是什么? 那些熟悉Asp.Net的人会知道有一个HttpContext可供请求期间调用的所有实体使用. Rails中有类似的东西吗? 解决方法 使用around_filter和Thread.current [],您可以轻松创建请求上下文/范围.请参阅以下示例. 首先
Rails在当前请求范围内共享信息的机制是什么?
那些熟悉Asp.Net的人会知道有一个HttpContext可供请求期间调用的所有实体使用. Rails中有类似的东西吗? 解决方法
使用around_filter和Thread.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对象中,该对象将在每次请求后重新创建. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |