Rails: как изменить переменную в Application Controller
В моем приложении у меня есть Компания, Подразделение, Пользователи.... Компания - имеет много Подразделений, Пользователи - принадлежит одному или нескольким Подразделениям.
Когда пользователь входит в систему, для current_division устанавливается значение User.division[0] в Application_controller. Я хочу реализовать функцию, где пользователь может переключаться между различными подразделениями. Любые идеи о том, как реализовать эту функциональность.
Как изменить current_division в Application_controller? Это current_division используется другими контроллерами и моделями.
Class Division < ActiveRecord:Base
def self.current_div options={}
if options[:division_id].nil?
current_user.division[0]
else
Division.find_by_id(options[:id])
end
конец
Я вызываю метод Division.current_div, когда пользователь выбирает другое деление из выпадающего списка
2 ответа
Вы можете переместить метод в ApplicationController
и сделать это как вспомогательный метод. Задавать session
переменная всякий раз, когда вы хотите переключить деление. Вы должны хранить свои division_id
в session
, Ваш current_division
Метод должен выглядеть так:
class ApplicationController < ActionController::Base
...
...
private
def current_division
if session[:division_id]
@current_division = Division.find_by_id(session[:division_id])
session.delete(:division_id)
else
@current_division ||= current_user.application[0] # not sure what are you trying to do here
end
end
helper_method :current_division
end
Вам просто нужно позвонить current_division
и он проверит, если session[:division_id]
существует и обновит разделение по мере необходимости. Вам просто нужно установить сеанс var, когда вы хотите переключиться и вызвать current_division
в любое время в любом месте.
Вы можете иметь выпадающий список на панели навигации, где вы можете загрузить все подразделения. выберите текущий раздел в раскрывающемся списке. Передайте текущий параметр деления в параметрах URL. проверьте параметры в контроллере приложения и установите разделение.
class ApplicationController < ActionController::Base
before_filter :set_current_division
def set_current_division
@current_division = Division.find_by_name(params[:division_name])
end
end