2011-12-19 39 views
2

我是一名編寫我的第一個應用程序的Rails新手,我很難搞清楚視圖是如何工作的。我只是想寫一個簡單的導航菜單,動態地抓取我所有「服務」的列表,然後列出那些下面的子分類「服務產品」。此導航需要顯示在我的應用程序的每個頁面上。訪問全局導航的實例變量

我嘗試了以下方法來測試我是否可以提取數據。

#application_helper.rb 

    def service_list 
    ServiceOffering.find(1) 
    end 

#application.html.erb 

<%= service_list.name %> 
<%= yield %> 

這個工程,但我讀了,我不應該把這種事情在application_helper。我將它移到了application_controller.rb中,但它在那裏不起作用。我對這件事情非常困惑。顯然,我的CRUD中有@service_offering的實例變量,但根據操作它們都是不同的。我只想定義一個我可以從任何地方訪問的。我在過去幾周看過並閱讀了很多教程,但幾乎沒有任何教程涉及應用程序範圍內的這類內容。我真的很感謝一個容易理解的如何處理這種性質的解釋。謝謝!

+0

嘗試增加。首先,以find命令其他的人發生衝突:ServiceOffering.find(1)。首先 – Oranges13 2011-12-19 16:53:45

回答

2

如果你想將其設置在你有幾個選項的應用控制器:

,你可以用一個輔助方法設定,讓

#application_controller.rb 

helper_method :service_list 

def service_list 
    ServiceOffering.find(1) 
end 

或者你可以用它設置鉤,放入一個特殊的實例變量不會與你有

#application_controller.rb 

before_filter :service_list 

def service_list 
    @special_service_offerice = ServiceOffering.find(1) 
end 
+0

謝謝!我認爲那是我需要的。我相信我對「helper」與「helper_methods」有點混淆。一般來說,我是否正在採取正確的方法來嘗試做什麼,即構建一個站點範圍的導航? – 2011-12-19 17:43:20

+0

我會說helper_method是正確的方法。我會將helper_methods用於整個應用程序中靜態的事物,但可能需要在控制器中進行訪問。我會使用before_filter,它需要在整個應用程序中都可訪問,但可能會從控制器更改爲控制器(即可能是頁面上的麪包屑鏈接) – Olives 2011-12-19 17:58:47