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