Rails Переменная для всех действий контроллера
Это должен быть очень простой вопрос. У меня есть переменная, как показано ниже.
@administration = Administration.first
Я хочу, чтобы эта переменная была доступна через каждое действие контроллера по всем моим контроллерам, например, если у меня есть контроллер Product, а внутри него есть обычные CRUD-действия, я хочу, чтобы переменная @administration, как указано выше, была помещена во все действия CRUD. (Это не было бы необходимо для уничтожения или создания или обновления). У меня много контроллеров во всем моем проекте, и мне было интересно, есть ли более простой способ, чем добавление его вручную через все действия, в которых я хочу.
Я попробовал глобальную переменную
$administration = Administration.first
но я столкнулся с проблемой, когда он не обновляется, когда я обновляю фактическое содержимое в таблице Administration.first. Кроме того, я хотел бы избежать глобальных переменных.
Любая помощь будет высоко оценена. Благодарю!:)
Ответы
Ответ 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]