Usando la mezcla singleton de Rails, podría crear una clase de singleton en el ámbito de aplicación de Rails. Pero me preguntaba ¿Hay alguna forma de crearlo en el ámbito de una solicitud en particular?
Dado que una solicitud está vinculada a un hilo, puedes usar Thread
local store:
class RequestSingleton def self.instance Thread.current['request-singleton'] ||= RequestSingleton.new end def self.clear Thread.current['request-singleton'] = nil end end
Uso:
def index RequestSingleton.instance.do_some_setup # ... RequestSingleton.clear end
… y en cualquier otro lugar, simplemente use RequestSingleton.instance
para acceder a él.
Dado que es un hilo local, no hay problemas de sincronización.