Подтвердить что ты не робот

Rails Переменная для всех действий контроллера

Это должен быть очень простой вопрос. У меня есть переменная, как показано ниже.

@administration = Administration.first

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

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

 $administration = Administration.first

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

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

4b9b3361

Ответ 1

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

Ответ 2

Просто расширяя пост Christos...

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

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

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

before_action: set_admin, за исключением: [: create,: update,: destroy]