无法将CanCanCan与ActiveAdmin一起使用,并且无法为#< AdminUser>设计未定义的方法“ dashboards” [英] Unable to use CanCanCan with ActiveAdmin and Devise undefined method `dashboards' for #<AdminUser>

查看:72
本文介绍了无法将CanCanCan与ActiveAdmin一起使用,并且无法为#< AdminUser>设计未定义的方法“ dashboards”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用活动管理员
构建一个管理面板,我已经安装了三个gem

  gem' activeadmin',github:'activeadmin'
gem'devise'
gem'cancancan'

我将其设置如下:

  rails g active_admin:install#使用AdminUser Model创建了一个不错的管理面板
rails generate active_admin:resource MyModel#添加了我所有的模型

config / active_admin.rb

  config.authorization_adapter = ActiveAdmin :: CanCanAdapter 
config.cancan_ability_class =能力
config.authentication_method =:authenticate_admin_user!

ability.rb

 类能力
包括CanCan :: Ability

def initialize(user)
if user.admin?
可以:read,ActiveAdmin :: Page,:name => 仪表板
否则
可以:read,ActiveAdmin :: Page,:name => 仪表板
结束
结束
结束

为我为活动管理员生成的所有资源模型,都使用表格形式定义了不错的自定义方法,例如索引,显示,编辑等方法。



例如,我的管理员/仪表板.rb

  ActiveAdmin.register_page控制台执行

菜单优先级:1,标签:proc { I18n.t( active_admin.dashboard)}

#一些显示
内容标题的表:proc {I18n.t( active_admin.dashboard)}进行
div类: blank_slate_container,id: dashboard_default_message执行
列执行
列执行
面板最新访问者执行
#table_for Visitor('id desc')。limit( 10)执行
table_for Patient.order( id desc)。limit(10)执行
列(:name)
列(:mobile)
结束
结束
结束
结束#列
结束
zh d#内容

控制器执行
#before_action:authenticate_admin_user!
load_and_authorize_resource:through => :current_admin_user
结束

结束

如果我将 load_and_authorize_resource 注释掉,这是一个不错的登录系统,它在成功登录的详细信息上显示仪表板。
但是,当我使用 load_and_authorize_resource时,加载 https:// mywebsite / admin 时会引发错误

  NoMethodError Admin :: DashboardController#index 
undefined method'dashboards for#< AdminUser:0x007f0afd642878>

initial方法似乎工作正常。但是它不能以某种方式正确地重定向回仪表板。
我没有专门使用devise,但是当我最初运行 rails g active_admin:install 时,设置 activeadmin ,它会根据主动管理文档自动使用dev。



更新堆栈跟踪:

 通过Admin :: DashboardController#index作为HTML处理
AdminUser负载(50.8ms)选择 admin_users。*从 admin_users在 admin_users 。 id = $ 1 ORDER BY admin_users。 id ASC LIMIT $ 2 [[ id,2],[ LIMIT,1]]
在106毫秒内完成了500个内部服务器错误(ActiveRecord:50.8) ms)



NoMethodError(#< AdminUser:0x000000063c4fa0>的未定义方法'dashboard'):

activemodel(5.0.6)lib /active_model/attribute_methods.rb:433:在`method_missing'中
cancancan(2.0.0)lib / cancan / controller_resource.rb:201:在`resource_base_through'中
cancancan(2.0.0)lib / cancan /controller_resource.rb:190:in`resource_base'
cancancan(2.0.0)l ib / cancan / controller_resource.rb:72:在`load_collection?'中
cancancan(2.0.0)lib / cancan / controller_resource.rb:36:在`load_resource'
cancancan(2.0.0)lib中/cancan/controller_resource.rb:28:在`load_and_authorize_resource'中
cancancan(2.0.0)lib / cancan / controller_resource.rb:12:在`block in add_before_action'
activesupport(5.0.6)lib中/active_support/callbacks.rb:398:in`instance_exec'
activesupport(5.0.6)lib / active_support / callbacks.rb:398:in`block in make_lambda'
activesupport(5.0.6)lib /active_support/callbacks.rb:169:在'block(2个级别)中止'
actionpack(5.0.6)lib / abstract_controller / callbacks.rb:12:in在'block(2个级别)中<模块:callbacks>'
activesupport(5.0.6)lib / active_support / callbacks.rb:170:在'阻止暂停'
activesupport(5.0.6)lib / active_support / callbacks.rb:454:在'通话中阻止'
activesupport(5.0.6)lib / active_support / callbacks.rb:454:在`每个'
activesupport(5.0.6)lib / active_support / callbacks.r中b:454:in`call'
activesupport(5.0.6)lib / active_support / callbacks.rb:101:in`__run_callbacks__'
activesupport(5.0.6)lib / active_support / callbacks.rb: 750:在`_run_process_action_callbacks'中
activesupport(5.0.6)lib / active_support / callbacks.rb:90:在`run_callbacks'中
actionpack(5.0.6)lib / abstract_controller / callbacks.rb:19:在`process_action'
actionpack(5.0.6)lib / action_controller / metal / rescue.rb:20:在`process_action'
actionpack(5.0.6)lib / action_controller / metal / instrumentation.rb: 32:在'process_action'中的块
activesupport(5.0.6)lib / active_support / notifications.rb:164:在`工具中的块中
activesupport(5.0.6)lib / active_support / notifications / instrumenter.rb:21:在'instrument'中
activesupport(5.0.6)lib / active_support / notifications.rb:164:在`instrument'
actionpack(5.0.6)lib / action_controller / metal / instrumentation.rb:30:在`process_action'
actionpack(5.0.6)lib / action_controller / metal / params_wrapper.rb:248:在`proce ss_action'
activerecord(5.0.6)lib / active_record / railties / controller_runtime.rb:18:在'process_action'
actionpack(5.0.6)lib / abstract_controller / base.rb:126:in` process'
actionview(5.0.6)lib / action_view / rendering.rb:30:在'process'
actionpack(5.0.6)lib / action_controller / metal.rb:190:在Dispatch中
actionpack(5.0.6)lib / action_controller / metal.rb:262:在`dispatch'中
actionpack(5.0.6)lib / action_dispatch / routing / route_set.rb:50:in`dispatch'
actionpack(5.0.6)lib / action_dispatch / routing / route_set.rb:32:in`serve'
actionpack(5.0.6)lib / action_dispatch / journey / router.rb:39:in`在发球的
actionpack(5.0.6)lib / action_dispatch / journey / router.rb中阻止:26:在`each'
actionpack(5.0.6)lib / action_dispatch / journey / router.rb中: 26:在`serve'
actionpack(5.0.6)lib / action_dispatch / routing / route_set.rb:727:在`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in`call'
newrelic_rpm(4.5.0.3 37)lib / new_relic / rack / agent_hooks.rb:30:在`traced_call'中
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在`call'中
newrelic_rpm(4.5.0.337)lib / new_relic / rack / browser_monitoring.rb:32:在`traced_call'中
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在`call'中
监护人(1.2.7)lib / warden / manager.rb:36:in在'通话中'
监护人(1.2.7)lib / warden / manager.rb:35:in`catch'
管理员(1.2.7)lib / warden / manager.rb:35:在`call'中
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in`调用'
机架(2.0.3)lib / rack / etag.rb:25:在'调用'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在`call'
机架(2.0.3)lib / rack / conditional_get.rb:25中:在`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb中: 92:在`call'
rack(2.0.3)lib / rack / head.rb:12:在`call'
newrelic_rp m(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in`call'
rack(2.0.3)lib / rack / session / abstract / id.rb:232:in` context'
机架(2.0.3)lib / rack / session / abstract / id.rb:226:in'call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing。 rb:92:in'call'
actionpack(5.0.6)lib / action_dispatch / middleware / cookies.rb:613:in`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在'call'
activerecord(5.0.6)lib / active_record / migration.rb:553:在'call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in'call'
actionpack(5.0.6)lib / action_dispatch / middleware / callbacks.rb:38:in`block in call'
activesupport(5.0。 6)lib / active_support / callbacks.rb:97:在__run_callbacks__中
activesupport(5.0.6)lib / active_support / callbacks.rb:750:在`_run_call_callbacks'
activesupport中(5.0.6) lib / active_support / callbacks.rb:90:in`r un_callbacks的
actionpack(5.0.6)lib / action_dispatch / middleware / callbacks.rb:36:in`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb: 92:在`call'
actionpack(5.0.6)lib / action_dispatch / middleware / executor.rb:12:在`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在`call'
actionpack(5.0.6)lib / action_dispatch / middleware / remote_ip.rb:79:在`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in'call'
better_errors(2.4.0)lib / better_errors / middleware.rb:59:in`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in`call'
actionpack(5.0.6)lib / action_dispatch / middleware / debug_exceptions.rb:49:in`call'
newrelic_rpm(4.5。 0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in`call'
网络控制台(3.5.1)lib / web_console / middleware.rb:135:in`call_app'
w eb-console(3.5.1)lib / web_console / middleware.rb:20:in在通话中
web-console(3.5.1)lib / web_console / middleware.rb:18:在catch中
Web控制台(3.5.1)lib / web_console / middleware.rb:18:在`call'中
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在`call'
actionpack(5.0.6)lib / action_dispatch / middleware / show_exceptions.rb:31:在`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing中。 rb:92:in`call'
铁路(5.0.6)lib / rails / rack / logger.rb:36:in`call'
铁路(5.0.6)lib / rails / rack / logger.rb:24:in在``阻止通话中''
activesupport(5.0.6)lib / active_support / tagged_logging.rb:69:in在``阻止在标签中''
activesupport(5.0.6)lib / active_support / tagged_logging.rb:26:在'tagged'
activesupport(5.0.6)lib / active_support / tagged_logging.rb:69:in'tagged'
铁路(5.0.6)lib / rails / rack / logger.rb:24:in`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentatio n / middleware_tracing.rb:92:在'call'
链轮轨道(3.2.1)lib / sprockets / rails / quiet_assets.rb:13:在'call'
newrelic_rpm(4.5.0.337) lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in`call'
actionpack(5.0.6)lib / action_dispatch / middleware / request_id.rb:24:in`call'
newrelic_rpm( 4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在`call'
机架(2.0.3)lib / rack / method_override.rb:22:在`call'
中newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在'call'
机架(2.0.3)lib / rack / runtime.rb:22:在'call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在'call'中
activesupport(5.0.6)lib / active_support / cache / strategy / local_cache_middleware.rb:28:在`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92中:在`call'
actionpack(5.0.6)lib / action_dispatch / middleware / executor中。 rb:12:in`call'
新relic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在`call'中
actionpack(5.0.6)lib / action_dispatch / middleware / static.rb:136:在`call'中
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:in`call'
机架(2.0.3)lib / rack / sendfile.rb:111:in`调用'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在'调用'
的Railties(5.0.6)lib / rails / engine.rb:522中:在`call'
newrelic_rpm(4.5.0.337)lib / new_relic / agent / instrumentation / middleware_tracing.rb:92:在`call'
puma(3.10.0)lib / puma / configuration.rb: 225:in`call'
puma(3.10.0)lib / puma / server.rb:605:in`handle_request'
puma(3.10.0)lib / puma / server.rb:437:在`process_client'
puma(3.10.0)lib / puma / server.rb:301:在`运行中阻止
puma(3.10.0)lib / puma / thread_pool.rb:120:在`spawn_thread中的块'
中渲染/usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middlewar e / templates / rescues / diagnostics.html.erb在救援/布局中
渲染/usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates /rescues/_source.html.erb
呈现/usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html。 erb(4.6ms)
渲染/usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
渲染/usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb(2.2ms)
渲染/usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
呈现的/ usr / local / rvm / gems / ruby​​-2.3.4 / gems / actionpack-5.0.6 / lib / action_dispatch / middleware / templates / rescues / _request_and_response.html.erb(1.0ms)
呈现/ usr / local / rvm / gems / ruby -2.3.4 / gems / actionpack-5.0.6 / lib / a救援/布局中的ction_dispatch / middleware / templates / rescues / diagnostics.html.erb(35.2ms)


解决方案

如果您遵循步骤,将 Cancancan ActiveAdmin 集成在一起,那么您只需要扩展 Ability使用所需的用户角色#initialize

 #应用程序/模型/功能。 rb 

def initialize(user)
如果user.admin?
可以:manage,:all
elsif user.product_manager吗?
can:manage,Product
can:read,ActiveAdmin :: Page,name:'Dashboard'
end
end


无需在每个控制器中调用 load_and_authorize_resource


I'm constructing an admin panel with active admin I've installed the three gems

gem 'activeadmin', github: 'activeadmin'
gem 'devise'
gem 'cancancan'

I set it up as follows:

rails g active_admin:install # Created a nice admin panel, with AdminUser Model
rails generate active_admin:resource MyModel # Added all my models

config/active_admin.rb

config.authorization_adapter = ActiveAdmin::CanCanAdapter
config.cancan_ability_class = Ability
config.authentication_method = :authenticate_admin_user!  

ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    if user.admin?
      can :read, ActiveAdmin::Page, :name => "Dashboard"
    else
      can :read, ActiveAdmin::Page, :name => "Dashboard"
    end
  end
end

and I also defined nice custom methods using formtastic, like index, show, edit, etc. methods for all my resource models I generated for active admin.

For example, my admin/dashboard.rb

ActiveAdmin.register_page "Dashboard" do

  menu priority: 1, label: proc{ I18n.t("active_admin.dashboard") }

  # some tables to display
  content title: proc{ I18n.t("active_admin.dashboard") } do
    div class: "blank_slate_container", id: "dashboard_default_message" do
      columns do
        column do
          panel "Latest Visitors" do
            # table_for Visitor('id desc').limit(10) do
            table_for Patient.order("id desc").limit(10) do
              column(:name) 
              column(:mobile)
            end
          end
        end
      end # columns
    end
  end # content

  controller do
    # before_action :authenticate_admin_user!   
    load_and_authorize_resource :through => :current_admin_user
  end

end

The app runs fine if I comment out load_and_authorize_resource, a nice login system, which shows dashboard on successful log in details. But when I use "load_and_authorize_resource", it throws an error when I load https://mywebsite/admin saying

NoMethodError in Admin::DashboardController#index
undefined method `dashboards' for #<AdminUser:0x007f0afd642878>

The method initialize seems to be working fine. But it somehow doesn't redirect back properly to the dashboard. I didn't specifically use devise, but when I ran rails g active_admin:install initially, when setting up activeadmin, it automatically used devise, done as per the activeadmin documentation.

Update Stack trace:

Processing by Admin::DashboardController#index as HTML
  AdminUser Load (50.8ms)  SELECT  "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = $1 ORDER BY "admin_users"."id" ASC LIMIT $2  [["id", 2], ["LIMIT", 1]]
Completed 500 Internal Server Error in 106ms (ActiveRecord: 50.8ms)



NoMethodError (undefined method `dashboards' for #<AdminUser:0x000000063c4fa0>):

activemodel (5.0.6) lib/active_model/attribute_methods.rb:433:in `method_missing'
cancancan (2.0.0) lib/cancan/controller_resource.rb:201:in `resource_base_through'
cancancan (2.0.0) lib/cancan/controller_resource.rb:190:in `resource_base'
cancancan (2.0.0) lib/cancan/controller_resource.rb:72:in `load_collection?'
cancancan (2.0.0) lib/cancan/controller_resource.rb:36:in `load_resource'
cancancan (2.0.0) lib/cancan/controller_resource.rb:28:in `load_and_authorize_resource'
cancancan (2.0.0) lib/cancan/controller_resource.rb:12:in `block in add_before_action'
activesupport (5.0.6) lib/active_support/callbacks.rb:398:in `instance_exec'
activesupport (5.0.6) lib/active_support/callbacks.rb:398:in `block in make_lambda'
activesupport (5.0.6) lib/active_support/callbacks.rb:169:in `block (2 levels) in halting'
actionpack (5.0.6) lib/abstract_controller/callbacks.rb:12:in `block (2 levels) in <module:Callbacks>'
activesupport (5.0.6) lib/active_support/callbacks.rb:170:in `block in halting'
activesupport (5.0.6) lib/active_support/callbacks.rb:454:in `block in call'
activesupport (5.0.6) lib/active_support/callbacks.rb:454:in `each'
activesupport (5.0.6) lib/active_support/callbacks.rb:454:in `call'
activesupport (5.0.6) lib/active_support/callbacks.rb:101:in `__run_callbacks__'
activesupport (5.0.6) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks'
activesupport (5.0.6) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.6) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (5.0.6) lib/action_controller/metal/rescue.rb:20:in `process_action'
actionpack (5.0.6) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (5.0.6) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (5.0.6) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (5.0.6) lib/active_support/notifications.rb:164:in `instrument'
actionpack (5.0.6) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (5.0.6) lib/action_controller/metal/params_wrapper.rb:248:in `process_action'
activerecord (5.0.6) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (5.0.6) lib/abstract_controller/base.rb:126:in `process'
actionview (5.0.6) lib/action_view/rendering.rb:30:in `process'
actionpack (5.0.6) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (5.0.6) lib/action_controller/metal.rb:262:in `dispatch'
actionpack (5.0.6) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (5.0.6) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (5.0.6) lib/action_dispatch/journey/router.rb:39:in `block in serve'
actionpack (5.0.6) lib/action_dispatch/journey/router.rb:26:in `each'
actionpack (5.0.6) lib/action_dispatch/journey/router.rb:26:in `serve'
actionpack (5.0.6) lib/action_dispatch/routing/route_set.rb:727:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/rack/agent_hooks.rb:30:in `traced_call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/rack/browser_monitoring.rb:32:in `traced_call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
warden (1.2.7) lib/warden/manager.rb:36:in `block in call'
warden (1.2.7) lib/warden/manager.rb:35:in `catch'
warden (1.2.7) lib/warden/manager.rb:35:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/etag.rb:25:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/conditional_get.rb:25:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/head.rb:12:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/session/abstract/id.rb:232:in `context'
rack (2.0.3) lib/rack/session/abstract/id.rb:226:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/cookies.rb:613:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
activerecord (5.0.6) lib/active_record/migration.rb:553:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
activesupport (5.0.6) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
activesupport (5.0.6) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
activesupport (5.0.6) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.6) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/executor.rb:12:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
better_errors (2.4.0) lib/better_errors/middleware.rb:59:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
web-console (3.5.1) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.5.1) lib/web_console/middleware.rb:20:in `block in call'
web-console (3.5.1) lib/web_console/middleware.rb:18:in `catch'
web-console (3.5.1) lib/web_console/middleware.rb:18:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
railties (5.0.6) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.6) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.6) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.0.6) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.6) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.0.6) lib/rails/rack/logger.rb:24:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/request_id.rb:24:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/method_override.rb:22:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/runtime.rb:22:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
activesupport (5.0.6) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/executor.rb:12:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.0.6) lib/action_dispatch/middleware/static.rb:136:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/sendfile.rb:111:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
railties (5.0.6) lib/rails/engine.rb:522:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
puma (3.10.0) lib/puma/configuration.rb:225:in `call'
puma (3.10.0) lib/puma/server.rb:605:in `handle_request'
puma (3.10.0) lib/puma/server.rb:437:in `process_client'
puma (3.10.0) lib/puma/server.rb:301:in `block in run'
puma (3.10.0) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
  Rendering /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
  Rendering /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (4.6ms)
  Rendering /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.2ms)
  Rendering /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.0ms)
  Rendered /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (35.2ms)

解决方案

If you follow the steps for integrating Cancancan with ActiveAdmin, then you just have to extend Ability#initialize with your user roles as you need like so:

# app/models/ability.rb

def initialize(user)
  if user.admin?
    can :manage, :all
  elsif user.product_manager?
    can :manage, Product
    can :read, ActiveAdmin::Page, name: 'Dashboard'
  end
end

No need to invoke load_and_authorize_resource in each controller!

这篇关于无法将CanCanCan与ActiveAdmin一起使用,并且无法为#&lt; AdminUser&gt;设计未定义的方法“ dashboards”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆