С помощью 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, объект будет воссоздан после каждого запроса.