我有一個變量,我需要在整個我的應用程序全局可用(所以我已經在applicationController中設置@account)。從Rails插件訪問應用程序變量
但是,我有一個插件需要訪問相同的變量。
注意:這個變量在每個請求中是不同的。
創建此架構的最佳方式是什麼?
我有一個變量,我需要在整個我的應用程序全局可用(所以我已經在applicationController中設置@account)。從Rails插件訪問應用程序變量
但是,我有一個插件需要訪問相同的變量。
注意:這個變量在每個請求中是不同的。
創建此架構的最佳方式是什麼?
也許這樣的事情會工作:
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 %>
在應用程序控制器中設置@account並不會使其在整個應用程序中全局可用 - 例如,模型無法訪問它。控制器中設置的任何實例變量只能在控制器或視圖中使用。如果插件有控制器和視圖代碼,那麼這個代碼應該能夠以正常的方式訪問變量,只要該變量在插件控制器代碼運行之前設置即可。
如果您提供了更多關於您想要做什麼的細節(例如您想要訪問@account的位置/方式),那麼有人可能會提出一個好方法。
@account在每個請求的before_filter設置。 該插件爲某些AR查詢添加了默認範圍 – 2010-11-22 15:07:46
這樣做是否可以使每個線程都是獨立的?我不想跨越用戶之間的流...... – 2010-11-22 15:16:38