如何根据活动管理员中用户的角色显示作用域?

问题描述

我遇到错误

 undefined local variable or method `current_admin_user' for #<ActiveAdmin::ResourceDSL

如何在此处访问current_admin_user对象?

  ActiveAdmin.register Job do
    def quick_filters
       if current_admin_user.super_admin?
         [:all,:draft,:scheduling,:rejected]
       else
         [:all,:rejected]
       end
    end

     quick_filters.each do |a|
       scope a
     end
  end

这有效:

controller do
   def scoped_collection
      @jobs = if current_admin_user.super_admin?
            super.includes :trip,:car,:concierge,:creator,:job_template
          else
            super.where(concierge_id: current_admin_user.id).includes :trip,:job_template
          end
   end
end

解决方法

我认为这应该可行:

ActiveAdmin.register Job do

  scope :all
  scope :draft,:if => proc { current_admin_user.super_admin? }
  scope :scheduling
  scope :rejected

end

用于设置作用域的DSL在服务器启动时进行评估,并且无权访问基于请求周期的数据(例如已登录的用户)。为了解决这个问题,ActiveAdmin的概念是用proc包装代码,以便将随附的代码评估推迟到请求周期。

祝你好运!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...