2011-02-28 124 views
2

它是一個常見的做法是做一個像這樣的過濾器:的before_filter設置常見實例變量(Ruby on Rails的)

before_filter :get_clients, :only => [:new, :edit, :create, :update] 
... 
def get_clients 
     @clients = Client.accessible_by(current_ability) 
end 

我的表單需要訪問@clients,所以我設置一個變量@clients在過濾之前,而不是在每種方法中進行。這有意義嗎?

+0

這是常見的,乾燥和乾淨(即使顯然不寧靜)。 – apneadiving 2011-02-28 19:56:22

回答

5

我建議建立一個memoized幫手,而不是:

def current_clients 
    @current_clients ||= Client.accessible_by(current_ability) 
end 
helper :current_clients 

這將很好的工作作爲一個前過濾器,但不會運行,除非你需要實際加載的客戶端列表形式/視圖。你得到這個資源的延遲加載。知道如何加載客戶列表的責任仍然在控制器中。

+0

剛剛嘗試過這個建議,問題是current_ability只能從控制器中獲得。 (我正在使用康康) – 2011-02-28 20:22:23

+0

我粘貼的代碼塊應該放在控制器內。你無法在那裏訪問你的罐頭幫手嗎? – Winfield 2011-02-28 20:24:57

+0

好吧,這很有道理 – 2011-02-28 20:45:30

相關問題