2010-06-05 31 views
24

这应该是一个非常简单的滑轨问题。我有一个像下面这样的变量。所有控制器操作中的滑轨变量

@administration = Administration.first 

我希望此变量是通过在所有我控制器每个控制器动作来访问,以便例如,如果我有一个产品控制器和它里面我平时的CRUD操作,我想定义的变量@administration将其纳入所有的CRUD行动。 (不需要销毁或创建或更新)。我有我的整个项目的许多控制器,我想知道是否有比手动添加它通过一切,我想它的动作更简单的方法。

我试过一个全局变量

$administration = Administration.first 

,但我遇到更新Administration.first表的实际内容时未更新的问题。另外,我想避免全局变量。

任何帮助将不胜感激。谢谢! :)

回答

65

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

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

+0

真棒,帮助表示感谢。 – AustinT 2013-12-07 20:19:35

+0

它是否必须是@instance变量,才能在操作中共享? – Qasim 2017-04-23 09:33:22

15

只是延长克里斯托后...

如果你不想@administration可访问摧毁,创建和更新控制器的操作,然后补充:除了=>:动作到的before_filter这样的:

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

on Rails的4和5的before_filter它弃用。您可以使用它代替:

before_action:set_admin,除了:[:创建,:更新:摧毁]