2014-07-24 4 views
8

Использование singleton mixin из рельсов Я могу создать одноэлементный класс в области приложения rails. Но мне было интересно, есть ли способ создать его в рамках конкретного запроса?Singleton в области запроса в рельсах

ответ

7

Поскольку запрос привязан к нити, вы можете использовать Thread local магазин:

class RequestSingleton 
    def self.instance 
    Thread.current['request-singleton'] ||= RequestSingleton.new 
    end 

    def self.clear 
    Thread.current['request-singleton'] = nil 
    end 
end 

Использование:

def index 
    RequestSingleton.instance.do_some_setup 

    # ... 

    RequestSingleton.clear 
end 

... и где-нибудь еще просто использовать RequestSingleton.instance для доступа к нему.

Поскольку это нить локальная, проблем с синхронизацией нет.

Смежные вопросы