Переменная Rails для всех действий контроллера - PullRequest
25 голосов
/ 05 июня 2010

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

@administration = Administration.first

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

Я попытался использовать глобальную переменную

 $administration = Administration.first

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

Любая помощь будет высоко ценится.Спасибо!:)

Ответы [ 2 ]

69 голосов
/ 05 июня 2010

Вы можете добавить 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

16 голосов
/ 05 июня 2010

Просто расширение записи Christos ...

Если вы не хотите, чтобы @administration было доступно для уничтожения, создания и обновления действий контроллера, добавьте: кроме =>: действие к before_filter, например так:

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

На Rails 4 и 5 before_filter это устарело.Вы можете использовать это вместо:

before_action: set_admin, кроме: [: create,: update,: destroy]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...