无法将CanCanCan与ActiveAdmin一起使用,并且无法为#< AdminUser>设计未定义的方法“ dashboards” [英] Unable to use CanCanCan with ActiveAdmin and Devise undefined method `dashboards' for #<AdminUser>
问题描述
我正在使用活动管理员
构建一个管理面板,我已经安装了三个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 $ c时$ c>,它会根据主动管理文档自动使用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 sayingNoMethodError 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 upactiveadmin
, 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
withActiveAdmin
, then you just have to extendAbility#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一起使用,并且无法为#< AdminUser>设计未定义的方法“ dashboards”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!