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

时间:2016-11-04 14:30:38

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-2.3.1

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

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

这是我的has_sub_menu = false

has_sub_menu = true

some_controller01.rb

has_sub_menu = true

some_controller02.rb

layout.rb

我在if controller.has_sub_menu == true show_menu_items end

中尝试过这样的做法
show_menu_items

has_sub_menu将在该两个控制器中可用,目前我无法访问布局文件中的application

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

同样如何在int hCrt = _open_osfhandle((intptr_t)hNamedPipe, _O_TEXT); FILE *hf = _fdopen(hCrt, "w"); *stdout = *hf; setvbuf(stdout, NULL, _IONBF, 0); 控制器中声明变量并在其他两个控制器中为该变量分配不同的值,我需要在layout.rb文件中访问该值以进行子菜单验证。

2 个答案:

答案 0 :(得分:1)

public class MainActivity extends AppCompatActivity { Realm realm; @BindView(R.id.realm_recycler) RecyclerView recyclerView; RealmResults<SomeObject> listenerSet; RealmChangeListener realmChangeListener = new RealmChangeListener() { @Override public void onChange(Object element) { if(recyclerView != null && recyclerView.getAdapter() != null) { recyclerView.getAdapter().notifyDataSetChanged(); } } }); @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); realm = Realm.getDefaultInstance(); setContentView(R.layout.activity_main); ButterKnife.bind(this); listenerSet = realm.where(SomeObject.class).findAll(); listenerSet.addChangeListener(realmChangeListener); // set up recyclerView adapter.updateData(realm.where(SomeObject.class).findAll()); } @Override public void onDestroy() { super.onDestroy(); if(realm != null) { realm.close(); realm = null; } } } 中添加一个实例方法,并在任何控制器中覆盖它,该控制器应具有不同的值:

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 “方法”。

答案 1 :(得分:1)

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

function long_command() {
     cat $1 | grep -vE '[a-fA-F0-9]{5}' | \
     cat -n | sed -e 's/    / /g' | \
     sed -e 's/^  *//g' | \
     sort -k 3,3 -k 1n,1n | \
     uniq -f 2 | \
     sed -e 's/^[0-9]\{1,\} //' | \
     grep -Ev '^\s*PATTERN\s+' | \
     cat -n
}