如何在各种控制器中使用相同的变量 - 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
我正在使用 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