2016-07-01 104 views
1

我Rails中學習了很多關於DRY概念所以這裏是我的問題:Rails全局變量去哪裏?

我在我的應用程序的固定側邊欄總是需要加載不同的對象,如Locations

在與我的index頁面控制器,居然在controllers/pages_controller.rb我加載@locations

@company = current_user.company 

@locations = if @company 
    current_user.company.locations.order(:name) 
else 
    [] 
end 

一次我選擇一個位置和裝載,然而其工作正常,我的導航菜單(邊欄)查看委託從不同的控制器(在這種情況下,locations/show.html.erb)我的@locations變量不再被發現。

當然,我可以把它添加到show方法在我locations_controller.rb文件,但不是很乾考慮我不得不把上面的代碼中依賴的側邊欄導航菜單上的每一個控制器方法(全)因爲它是固定的。

什麼是幹這種方式做一次,而不必在每個控制器做到這一點?

回答

1

您可以在pages_controllerapplication_controller

def set_locations 
.... 
end 

然後創建一個方法和locations_controller添加before_filter

before_filter :set_locations 

它將設置呼叫設置位置之前的所有頁面和位置的所有方法控制器。

如果要設置只對少數控制器操作的位置,然後調用:

before_filter :set_locations,:only=>[:show,:index, :your_action_name] 

更新時間:

在Rails 5 before_filter被棄用,你可以使用before_action

+1

**就作爲說明:Rails 5使用'before_action'回調代替,因爲'before_filter'現在已被棄用。 – bntzio

0

您可以將其添加到ApplicationController中的每個操作之前運行的方法中,每個控制器都從此ApplicationController繼承,以便它可用。