2010-06-05 61 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,除了:[:創建,:更新:摧毀]