0

我正在使用 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 文件中访问该值以进行子菜单验证。

4

2 回答 2

1

添加一个实例方法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所有控制器中的“方法”。

于 2016-11-04T14:32:19.427 回答
1

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

module ApplicationHelper
  CONTROLLERS_LIST = ['UsersController']

  def has_sub_menu
    CONTROLLERS_LIST.exclude?(params[:controller])
  end
end
于 2016-11-04T14:36:45.490 回答