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
Другие вопросы по тегам