问题描述
我遇到错误:
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
包装代码,以便将随附的代码评估推迟到请求周期。
祝你好运!