2015-05-21 91 views
0

我有一個具有以下結構大廈導航項目在軌道4,5

Categories Table 
---------------- 
id 
name 
slug 

我想建立基於表的內容導航欄分類表。

當前實現

  1. 我在ApplicationController中有一個私有方法

    private 
        def get_categories 
        @categories = Category.all 
        end 
    
  2. 我有以下before_action

    before_action :get_categories 
    
  3. 我用的是@categories實例變量來構建我的導航欄。

問題

此使用的before_action似乎並不在這裏。這不是一個真正的過濾方法。這個問題有更好的/不同的方法嗎?

回答

0

您可以爲其創建輔助方法並直接在視圖中使用。如果您的類別不經常更改,也可以使用緩存。

+0

我想,我可以通過使用helper_method:get_categories在ApplicationController中正確定義helper方法。這是一個可接受的解決方案嗎? –

+0

是的,這將是一種方式。 –

0

如果您想要使用Category.all來創建導航欄,這是一個演示文稿部分,如果導航欄的構建中涉及到某些邏輯,最好創建一個輔助程序來創建導航欄。在幫助程序方法中,您可以直接使用Categories.all

如果您只是想創建一個沒有邏輯涉及的導航欄,並且想要迭代我們的類別,我建議您直接在視圖上使用Category.all。但請確保將來您不會添加任何創建導航欄的邏輯。 如果你遵循上面的方法,並在將來決定增加一些範圍到類別取決於用戶或其他因素,那麼你將不得不修改'Category.all'用於創建導航欄的所有地方。如果導航欄只是從一個視圖文件創建的,這不會成爲問題。

在控制器或助手中編寫代碼的選擇取決於您將如何在視圖上編寫Category.all。如果Category.all需要在視圖中僅使用一次才能遍歷類別,那麼直接在視圖上使用Category.all會很好。