-1

В моем приложении у меня есть компания, подразделение, пользователи .... Компания - имеет много отделов, пользователей - принадлежит одному или нескольким подразделениям.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, когда пользователь может выбрать другое подразделение из выпадающего списка

+0

Показать код, в котором вы устанавливаете 'current_division' – RAJ

ответ

1

Вы можете переместить метод в 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] существует и будет обновлять разделение по мере необходимости. Вам просто нужно установить session var, когда вы хотите переключиться, и вызывать current_division в любое время в любом месте.

+0

Можно установить сеанс [: division_id] = что-то в моем Дивизии контроллер Защиту set_current_app сессии [: division_id = Params [: ID] конец – Oatmeal

+0

Да, вы установите 'session [: division_id]', в следующий раз, когда вы назовете 'current_division', он вернет вам новое коммутируемое деление – RAJ

+0

Спасибо .. это работает – Oatmeal

1

У вас может быть выпадающий список на навигационной панели, где вы можете загрузить все подразделения. выберите текущее подразделение в раскрывающемся списке. Передайте текущий параметр деления по параметрам url. проверьте параметры в контроллере приложения и установите divison.

class ApplicationController < ActionController::Base 
    before_filter :set_current_division 

    def set_current_division 
    @current_division = Division.find_by_name(params[:division_name]) 
    end 

end 
+0

В выше решение, @current_division - глобальная переменная? Что мы называем такими переменными? – Oatmeal

+0

@Oatmeal current_division - это переменная экземпляра ApplicationController. Фактически все ваши контроллеры, унаследованные от ApplicationController, имеют доступ к этой переменной. – Kamesh

Смежные вопросы