Переменная направляющих через все действия контроллера

Это должно быть очень простым вопросом о направляющих. У меня есть переменная как следующее.

@administration = Administration.first

Я хочу, чтобы эта переменная была доступна посредством каждого действия контроллера через все мои контроллеры так, например, если у меня есть контроллер продукта, и в нем у меня есть обычные действия CRUD, я хочу, чтобы @administration переменная, как определено выше была помещена во все действия CRUD. (Это не было бы необходимо в, уничтожают или создают или обновляют). У меня есть много контроллеров в течение моего проекта, и я задавался вопросом, существует ли более легкий путь, чем добавление его вручную посредством всех действий, в которых я хочу его.

Я попробовал глобальную переменную

 $administration = Administration.first

но я сталкиваюсь с проблемой, где она не обновляется, когда я обновляю фактическое содержание таблицы Administration.first. Кроме того, я хотел бы избежать глобальных переменных.

Любая справка очень ценилась бы.Спасибо!:)

26
задан jim 5 June 2010 в 05:47
поделиться

2 ответа

Вы можете добавить before_filter к вашему ApplicationController, который устанавливает переменную administration перед вызовом любого действия, и вы можете ограничить его только теми действиями, которые вам нужны.

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

70
ответ дан 28 November 2019 в 06:12
поделиться

Просто продолжаю пост Кристоса...

Если вы не хотите, чтобы @administration был доступен для действий контроллеров destroy, create и update, то добавьте :except => :action в before_filter, как это:

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

В Rails 4 и 5 before_filter устарел. Вместо него можно использовать следующее:

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

16
ответ дан 28 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: