2010-11-22 43 views
1

我有一個變量,我需要在整個我的應用程序全局可用(所以我已經在applicationController中設置@account)。從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並不會使其在整個應用程序中全局可用 - 例如,模型無法訪問它。控制器中設置的任何實例變量只能在控制器或視圖中使用。如果插件有控制器和視圖代碼,那麼這個代碼應該能夠以正常的方式訪問變量,只要該變量在插件控制器代碼運行之前設置即可。

如果您提供了更多關於您想要做什麼的細節(例如您想要訪問@account的位置/方式),那麼有人可能會提出一個好方法。

+0

@account在每個請求的before_filter設置。 該插件爲某些AR查詢添加了默認範圍 – 2010-11-22 15:07:46