Rails在所有控制器操作中变量

时间:2010-06-05 05:47:23

标签: ruby-on-rails ruby

这应该是一个非常简单的轨道问题。我有一个如下变量。

@administration = Administration.first

我希望通过我所有控制器上的每个控制器操作都可以访问此变量,例如,如果我有一个Product控制器,并且在其中我有通常的CRUD操作,我希望将上面定义的@administration变量放入进入所有CRUD行动。 (在销毁或创建或更新时不需要它)。我的项目中有很多控制器,我想知道是否有一种比通过我想要的所有操作手动添加控制器更简单的方法。

我尝试了一个全局变量

 $administration = Administration.first

但是当我更新Administration.first表的实际内容时,我遇到了一个没有更新的问题。另外,我想避免全局变量。

非常感谢任何帮助。谢谢! :)

2 个答案:

答案 0 :(得分:68)

您可以在ApplicationController中添加before_filter,在调用任何操作之前设置管理变量,并且可以将其限制为仅需要的操作。

class ApplicationController < ActionController::Base
...
before_filter :set_admin
def set_admin
  @administration = Administration.first
end
..

http://api.rubyonrails.org/v2.3.8/classes/ActionController/Filters/ClassMethods.html

答案 1 :(得分:16)

只是扩展Christos帖子......

如果您不希望销毁@administration,创建和更新控制器操作,则添加:except =&gt; :对before_filter的动作如下:

before_filter :set_admin, :except => [:create, :update, :destroy]

在Rails 4和5之前,before_filter不推荐使用它。您可以改为使用它:

  

before_action:set_admin,但:[:create,:update,:destroy]