如何在各种控制器中使用相同的变量 - ruby on rails

How to use same variable across various controllers - ruby on rails

我正在使用 ruby 2.3.1 和 rails 3.2.1。我需要在应用程序控制器中初始化一个名为 has_sub_menu = false 的变量。

在我的应用程序中,我使用了 30 多个控制器,只有两个控制器包含子菜单,因此我需要将 has_sub_menu = true 分配给这些控制器以在布局文件中对其进行验证。

这是我的application.rb

has_sub_menu = false

some_controller01.rb

has_sub_menu = true

some_controller02.rb

has_sub_menu = true

我在 layout.rb,

中这样尝试过
if controller.has_sub_menu == true
  show_menu_items
end

show_menu_items 将在这两个控制器中可用,目前我无法访问布局文件

中的 has_sub_menu

我知道在 c# 中我可以将变量声明为静态变量并使用对象在任何文件中访问它。

同样,我如何在 application 控制器中声明一个变量并在其他两个控制器中为该变量分配不同的值,我需要在 layout.rb 文件中访问该值以进行子菜单验证.

application_controller.rb 中添加实例方法并在任何控制器中覆盖它,它应该具有不同的值:

class ApplicationController < ActionController::Base
  def has_sub_menu # unless overriden in descending controller, value will be true
    true
  end
end

class OtherController < ApplicationController
  def has_sub_menu
     false
  end
end

这样您就可以在所有控制器中访问 has_sub_menu "method"。

相反,您可以创建辅助方法并检查控制器名称

module ApplicationHelper
  CONTROLLERS_LIST = ['UsersController']

  def has_sub_menu
    CONTROLLERS_LIST.exclude?(params[:controller])
  end
end