2009-11-23 160 views
1

在Rails中創建菜單有點麻煩。在ApplicationController中我有一個set_menu方法:在Rails中控制器和幫助器之間共享變量

def self.set_menu(menu, options = {}) 
    # ... 
end 

這是從每個控制器稱爲像這樣:

class UsersController < ApplicationController 
    set_menu :users 

    # ... 
end 

在set_menu,我需要創建一個變量,我以後可以在一個輔助方法達到找出哪些菜單項是活動菜單項。我通過使用類變量得到了這個工作。這在開發中運行良好,但事實證明,Rails在生產中緩存了這個變量,所以活動菜單從不改變。

那麼,我如何在set_menu中創建一個變量,我可以通過幫助程序方法訪問該變量,並且該生產階段不會緩存?

回答

4

實例變量在控制器和視圖之間共享,包括助手。

class ApplicationController 

    def self.set_menu(menu, options = {}) 
    before_filter(options) do |controller| 
     controller.send(:set_menu, menu) 
    end 
    end 

    # ... 


    protected 

    def set_menu(menu) 
     @menu = menu 
    end 

end 

# in your view 
<%= @menu %> 

如果你想創建更復雜的導航菜單,看看我的Tabs On Rails寶石。

+0

謝謝!對於這個問題,這是一個非常好的解決方案。 – rejeep 2009-11-23 09:47:11

相關問題