2017-09-08 134 views
0

嗨, 我需要你的康康帮助。Rails Cancan NameError - 未初始化的常量

我有这个CONTROLER:

类RegistrationsController <设计:: RegistrationsController

我需要的,因为我不得不重写的一些方法。

我需要控制对此控制器的访问权限,因为只有管理员可以添加新用户。

如何使用load_and_authorize_resource?

我ability.rb文件是: 类能力 包括惭惭::能力

DEF初始化(用户,controller_namespace) 用户|| = Usuario.new

case controller_namespace 
    when "Administrator" 
    if user.rol == 1  
     can :manage, Faq 
     can :manage, Tip 
     can :manage, Administrator::HomeTratamientoController 
    end 
    if user.rol == 2 
     can :manage, :admin_vacunas 
     can :manage, Registration 
    end 
    when "paciente" 
    if user.rol == 3 
     can :manage, Paciente::HomeController 
    end 
    else 
     can :read, :all 
end 

end

该模型是usuario.rb

我没有问题,当把rol为1,但是当为2,我放线:

load_and_authorize_resource

在注册控制器时我所说的新的行动由管理员联系,以添加新用户,告诉我后续的错误:

完成500内部服务器错误在42ms(ActiveRecord的:5.1ms)

NameError - 未初始化的常数注册: 的ActiveSupport(4.2.1)LIB/active_support/dependencies.rb:533:在load_missing_constant' activesupport (4.2.1) lib/active_support/dependencies.rb:184:in const_missing” 的ActiveSupport(4.2.1)LIB/active_support /偏转器/ methods.rb:261:在block in constantize' activesupport (4.2.1) lib/active_support/inflector/methods.rb:259:in constantize ' 的ActiveSupport(4.2.1)LIB/active_support/core_ext /串/是inflections.rb:66:在constantize' cancancan (2.0.0) lib/cancan/controller_resource.rb:156:in resource_class的 cancancan(2.0.0)LIB /康康舞/ controller_resource.rb:192:在resource_base' cancancan (2.0.0) lib/cancan/controller_resource.rb:80:in build_resource' cancancan(2.0.0)lib/cancan/controller_resource.rb:61:load_resource_instance' cancancan (2.0.0) lib/cancan/controller_resource.rb:35:in load_resource' cancancan(2.0.0)lib/cancan/controller_resource.rb:12:block in add_before_action' activesupport (4.2.1) lib/active_support/callbacks.rb:448:in block in make_lambda' 有效支持(4.2.1)lib/active_support/callbacks.rb:164:在block in halting' activesupport (4.2.1) lib/active_support/callbacks.rb:504:in区块中调用' activesupport(4.2.1)lib/active_support/callbacks.rb:504:in call' activesupport (4.2.1) lib/active_support/callbacks.rb:92:in _run_callbacks' activesupport(4.2.1) )lib/active_support/callbacks.rb:776:在_run_process_action_callbacks' activesupport (4.2.1) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack(4.2.1)lib/abstract_controller/callbacks.rb:19:in process_action' actionpack (4.2.1) lib/action_controller/metal/rescue.rb:29:in process_action' actionpack(4.2.1)lib/action_controller/metal/instrumentation .rb:32:在block in process_action' activesupport (4.2.1) lib/active_support/notifications.rb:164:in块中的仪器' 有效支持(4.2。1)lib/active_support/notifications/instrumenter.rb:20:在instrument' activesupport (4.2.1) lib/active_support/notifications.rb:164:in instrument' actionpack(4.2.1)lib/action_controller/metal/instrumentation.rb:30:in process_action' actionpack (4.2.1) lib/action_controller/metal/params_wrapper.rb:250:in process_action' activerecord(4.2.1)lib/action_view/rendering.rb:30:in process' actionpack (4.2.1) lib/action_controller/metal.rb:196:in dispatch' actionpack(4.2.1)lib/action_controller/metal/rack_delegation。 rb:13:在dispatch' actionpack (4.2.1) lib/action_controller/metal.rb:237:in块中的动作' actionpack(4.2.1)lib/action_dispatch/routing/route_set.rb:74:dispatch' actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:43:in serve' actionpack(4.2.1)lib/action_dispatch/routing/mapper.rb: 49:在serve' actionpack (4.2.1) lib/action_dispatch/journey/router.rb:43:in块中发球' actionpack(4。 2.1)lib/action_dispatch/journey/router.rb:30:in serve' actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:819:in call' newrelic_rpm(3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in call' newrelic_rpm (3.16.1.320) lib/new_relic/rack/agent_hooks.rb:30:in traced_call' newrelic_rpm(3.16.1.320) LIB/new_relic /剂/仪表/ middleware_tracing.rb:96:在call' newrelic_rpm (3.16.1.320) lib/new_relic/rack/browser_monitoring.rb:32:in traced_call ' newrelic_rpm(3.16.1.320)LIB/new_relic /剂/仪表/ middleware_tracing.rb:96:在call' newrelic_rpm (3.16.1.320) lib/new_relic/rack/developer_mode.rb:48:in traced_call' newrelic_rpm(3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:在中调用' warden(1.2.6)lib/warden/manager.rb:34:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' rack(1.6.4)lib/rack/etag.rb:24:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in上拨打' rack(1.6.4) lib/rack/conditionalget.rb:25:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' rack(1.6.4)lib/rack/head.rb:13:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' actionpack(4.2.1)lib/action_dispatch/middleware/params_parser。 rb:27:in call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in call' actionpack(4.2.1)lib/action_dispatch/middleware/flash.rb:260:in call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in call' rack(1.6.4)lib/rack/session/abstract/id.rb: 225:在context' rack (1.6.4) lib/rack/session/abstract/id.rb:220:in调用' newrelic_rpm(3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:在call' actionpack (4.2.1) lib/action_dispatch/middleware/cookies.rb:560:in调用' newrelic_rpm(3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb: 96:在call' activerecord (4.2.1) lib/active_record/query_cache.rb:36:in中调用' newrelic_rpm(3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:在call' activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:649:in调用' newrelic_rpm(3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:在call' activerecord (4.2.1) lib/active_record/migration.rb:378:in调用' newrelic_rpm(3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in call' actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:29:in块在呼叫 ' 的ActiveSupport(4.2.1)LIB/active_support/callbacks.rb:88:在_run_callbacks' activesupport (4.2.1) lib/active_support/callbacks.rb:776:in _run_call_callbacks' 的ActiveSupport(4.2.1)LIB/active_support/callbacks.rb:81:在run_callbacks' actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in呼叫' newrelic_rpm( 3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:在call' actionpack (4.2.1) lib/action_dispatch/middleware/reloader.rb:73:in调用' newrelic_rpm(3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:在call' actionpack (4.2.1) lib/action_dispatch/middleware/remote_ip.rb:78:in调用' newrelic_rpm 3.16.1.320)lib/new_遗迹/剂/仪表/ middleware_tracing.rb:96:在call' better_errors (2.1.1) lib/better_errors/middleware.rb:84:in protected_app_call ' better_errors(2.1.1)LIB/better_errors/middleware.rb:79:在better_errors_call' better_errors (2.1.1) lib/better_errors/middleware.rb:57:in呼叫' newrelic_rpm(3.16.1.320)LIB/new_relic /剂/在调用' 中的块call' web-console (2.3.0) lib/web_console/middleware.rb:28:in web-console(2.3.0)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:在call' actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in调用' lib/new_relic/web_console/middleware.rb:18:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' actionpack(4.2.1)lib/action_dispatch/middleware/show_exceptions.rb:30:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' railties(4.2.1)lib/rails/rack/logger。 rb:38:在call_app' railties (4.2.1) lib/rails/rack/logger.rb:20:in中的呼叫' activesupport(4.2。1)lib/active_support/tagged_logging.rb:68:在block in tagged' activesupport (4.2.1) lib/active_support/tagged_logging.rb:26:in标记为' activesupport(4.2.1)lib/active_support/tagged_logging.rb:68:在tagged' railties (4.2.1) lib/rails/rack/logger.rb:20:in调用' quiet_assets(1.1.0)lib/quiet_assets.rb: 27:在call_with_quiet_assets' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' actionpack(4.2.1)lib/action_dispatch/middleware/request_id.rb:21:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' rack(1.6.4)lib/rack/methodoverride.rb:22:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' (1.2.4)lib/active_support/cache/strategy/local_cache_middleware.rb:28:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' rack(1.6)lib/rack/runtime.rb:18:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' activesupport .4)lib/rack/lock.rb:17:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' actionpack(4.2.1)lib/act (4.2.4)lib/rails/engine.rb:113:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' rack(1.6.4)lib/rack/sendfile.rb:113:在call' newrelic_rpm (3.16.1.320) lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in调用' railties(4.2.1)lib/rails/engine.rb: 518:在call' railties (4.2.1) lib/rails/application.rb:164:in调用' newrelic_rpm(3.16.1.320)lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:在call' rack (1.6.4) lib/rack/content_length.rb:15:in调用' 瘦(1.7.0)lib/thin/connection.rb:86:在block in pre_process' thin (1.7.0) lib/thin/connection.rb:84:in pre_process' thin(1.7.0)lib/thin/connection.rb:53:in process' thin (1.7.0) lib/thin/connection.rb:39:in receive_data' eventmachine(1.2.0.1)lib/eventmachine.rb:194:在run' thin (1.7.0) lib/thin/backends/base.rb:73:in开始' 瘦(1.7.0)lib /thin/server.rb:162:in start' rack (1.6.4) lib/rack/handler/thin.rb:19:in运行' rack(1.6.4)lib/rack/server.rb:286:in start' railties (4.2.1) lib/rails/commands/server.rb:80:in开始' railties(4.2.1)lib/rails/commands/commands_tasks.rb:80:在block in server' railties (4.2.1) lib/rails/commands/commands_tasks.rb:75:in服务器' railties(4.2.1)lib/rails/commands/commands_tasks.rb:39:in run_command!' railties (4.2.1) lib/rails/commands.rb:17:in' bin/rails:9:<top (required)>' spring (1.7.2) lib/spring/client/rails.rb:28:in调用' spring(1.7.2)lib/spring/client/command.rb:7:call' spring (1.7.2) lib/spring/client.rb:30:in run' spring(1.7.2)bin/spring:49:in <top (required)>' spring (1.7.2) lib/spring/binstub.rb:11:in' bin /春天:13:在<top (required)>' bin/rails:3:in'

有些身体可以帮我吗?

+0

你确实有'Registration'模型吗? – coorasse

+0

谢谢你的回答。这个模型是Usuario.rb,RegistrationsController是一个来自devise的控制器,我读过如果我在ability.rb文件中使用: 可以:管理,管理员:: RegistrationsController 和控制器中: load_and_authorize_resource类:“RegistrationsController”应该工作,但不是 – josedes

回答

0

您写了can :manage, Registration,所以你需要一个Registration模型。

can :create, User 

,并在控制器,你load_and_authorize_resource :user, parent: false

https://github.com/CanCanCommunity/cancancan/wiki/authorizing-controller-actions

免费提示:

不写型号在西班牙语名字

在你的情况,你应该将其替换为,但用英文,总是。所以用User代替Usuario

+0

感谢您的回答,我真的赞赏你的帮助。 – josedes

+0

但我需要更多的帮助。 我把你说的完全一样,但是它显示了我的异常错误:你没有权限访问这个页面。 我在application_controller中有这个: rescue_from CanCan :: AccessDenied do | exception | respond_to do | format | format.html {redirect_to的root_path,警告: '您没有权限访问此页面'} format.js {头:禁止,CONTENT_TYPE: 'text/html的'} 结束 结束 .The模型Usuario.rb不在命名空间管理员 PD:我知道英文不是西班牙文,但是是一个传统的应用程序 – josedes

+0

你可以打印“例外”的内容吗?也许更新问题,使格式更清晰。 – coorasse

相关问题