Rails: 如何更改应用程序控制器中的变量

Rails: How to change the variable in Application Controller

在我的应用程序中,我有公司、部门、用户....公司 - 有很多部门,用户 - 属于一个或多个部门。

当用户登录时,current_division设置为Application_controller中的User.division[0]。我想实现一个用户可以在不同部门之间切换的功能。关于如何实现此功能的任何想法。

如何在Application_controller中更改current_division?此 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 方法

您可以移动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] 是否存在,并根据需要更新分区。当你想切换时,你只需要设置会话变量,随时随地调用current_division

您可以在导航栏上有一个下拉菜单,您可以在其中加载所有分区。 select 下拉列表中的当前分区。在 url params 上传递当前除法参数。检查应用程序控制器中的参数并设置分区。

class ApplicationController < ActionController::Base
  before_filter :set_current_division

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

end