2009-11-23 100 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

相关问题