2010-11-22 5 views
1

У меня есть переменная, которая мне нужна глобально для всего приложения (поэтому я установил @account в applicationController).Доступ к переменным приложения из плагина Rails

Однако плагин, который мне нужен, имеет доступ к одной и той же переменной.

Примечание: эта переменная отличается от каждого запроса.

Каков наилучший способ создания этой архитектуры?

ответ

0

Может быть что-то, как это будет работать:

class Account 
    def self.current 
    @current 
    # or: Thread.current[:current_account] 
    end 
    def self.current=(a) 
    @current = a 
    # or: Thread.current[:current_account] = a # ..if you want to be thread-safe. 
    end 
    ... 
end 

# your controller's before_filter: 
def assign_account 
    ... 
    Account.current = @account # But remember to set nil if none found! 
end 

# Any code in your app (view, model, almost anything): 
<%= Account.current.name if Account.current %> 
+0

Будет ли это работать так, чтобы каждый поток был независимым? Я не хочу пересекать потоки между пользователями ... – 2010-11-22 15:16:38

0

Настройка @account в вашем контроллере приложений не делает его доступным по всему миру во всем приложении - модели не могут получить к нему доступ, например. Любой экземпляр var, установленный в контроллере, будет доступен только в контроллере или представлениях. Если у плагинов есть контроллер и код просмотра, тогда этот код должен иметь доступ к переменной обычным способом, если переменная задана до запуска кода контроллера плагина.

Если вы предоставляете более подробную информацию о том, что вы хотите сделать (например, где/как вы хотите получить доступ к @account), тогда кто-то может предложить хороший подход.

+0

@account устанавливается в before_filter на каждом запросе. Плагин добавляет область по умолчанию к некоторым AR-запросам – 2010-11-22 15:07:46

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