【问题标题】:Share variable between controller and helper in Rails在 Rails 中的控制器和助手之间共享变量
【发布时间】:2009-11-23 07:23:36
【问题描述】:

我在 Rails 中创建菜单时遇到了一些麻烦。在 ApplicationController 我有一个 set_menu 方法:

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

每个控制器都会这样调用它:

class UsersController < ApplicationController
  set_menu :users

  # ...
end

在 set_menu 中,我需要创建一个变量,以后可以在辅助方法中找到该变量,以找出哪些菜单项是活动的。我通过使用类变量得到了这个工作。这在开发中运行良好,但事实证明 Rails 在生产中缓存了这个变量,所以活动菜单从未改变。

那么,我如何在 set_menu 中创建一个可以从辅助方法访问的变量,并且该生产阶段不缓存?

【问题讨论】:

    标签: ruby-on-rails caching menu


    【解决方案1】:

    实例变量在控制器和视图之间共享,包括助手。

    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 Gem。

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 2014-06-29
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多