在Rails中创建菜单时遇到一些麻烦。在ApplicationController中,我有一个set_menu方法:
def self.set_menu(menu, options = {})
# ...
end
这是从每个控制器调用的,如下所示:
class UsersController < ApplicationController
set_menu :users
# ...
end
在set_menu中,我需要创建一个变量,我稍后可以在帮助器方法中找到该变量,以找出哪个菜单项是活动的。我通过使用类变量来实现这一点。这在开发中运行良好,但事实证明Rails将此变量缓存在生产中,因此活动菜单永远不会改变。
那么,我如何在set_menu中创建一个我可以从辅助方法到达的变量,并且生产阶段不会缓存?
答案 0 :(得分: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宝石。