2012-03-03 41 views
0

我有一个正在使用cancan权限的rails应用程序,我试图阻止其他用户编辑另一个用户的仪表板。这适用于其他型号,但不适用于此型号。Cancan权限

profile.rb

belongs_to :dashboard 

Dashboard.rb

has_many :profiles 

Dashboard_controller

before_filter :authenticate_user! 
load_and_authorize_resource :through => :current_profile 

Ability.rb

can :manage, Dashboard, :profile => { :user_id => user.id } 

当我去查看我的仪表板导轨给我的错误

未定义的方法`仪表盘

任何想法如何,我可以克服这个问题?

完整跟踪

activemodel (3.1.3) lib/active_model/attribute_methods.rb:385:in `method_missing' 
activerecord (3.1.3) lib/active_record/attribute_methods.rb:60:in `method_missing' 
cancan (1.6.7) lib/cancan/controller_resource.rb:174:in `resource_base' 
cancan (1.6.7) lib/cancan/controller_resource.rb:77:in `load_collection?' 
cancan (1.6.7) lib/cancan/controller_resource.rb:33:in `load_resource' 
cancan (1.6.7) lib/cancan/controller_resource.rb:25:in `load_and_authorize_resource' 
cancan (1.6.7) lib/cancan/controller_resource.rb:10:in `block in add_before_filter' 
activesupport (3.1.3) lib/active_support/callbacks.rb:439:in `_run__4465164984821190291__process_action__669795061578511304__callbacks' 
activesupport (3.1.3) lib/active_support/callbacks.rb:386:in `_run_process_action_callbacks' 
activesupport (3.1.3) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (3.1.3) lib/abstract_controller/callbacks.rb:17:in `process_action' 
actionpack (3.1.3) lib/action_controller/metal/rescue.rb:17:in `process_action' 
actionpack (3.1.3) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action' 
activesupport (3.1.3) lib/active_support/notifications.rb:53:in `block in instrument' 
activesupport (3.1.3) lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
activesupport (3.1.3) lib/active_support/notifications.rb:53:in `instrument' 
actionpack (3.1.3) lib/action_controller/metal/instrumentation.rb:29:in `process_action' 
actionpack (3.1.3) lib/action_controller/metal/params_wrapper.rb:201:in `process_action' 
activerecord (3.1.3) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
actionpack (3.1.3) lib/abstract_controller/base.rb:121:in `process' 
actionpack (3.1.3) lib/abstract_controller/rendering.rb:45:in `process' 
actionpack (3.1.3) lib/action_controller/metal.rb:193:in `dispatch' 
actionpack (3.1.3) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch' 
actionpack (3.1.3) lib/action_controller/metal.rb:236:in `block in action' 
actionpack (3.1.3) lib/action_dispatch/routing/route_set.rb:65:in `call' 
actionpack (3.1.3) lib/action_dispatch/routing/route_set.rb:65:in `dispatch' 
actionpack (3.1.3) lib/action_dispatch/routing/route_set.rb:29:in `call' 
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call' 
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize' 
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:75:in `optimized_each' 
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize' 
rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call' 
actionpack (3.1.3) lib/action_dispatch/routing/route_set.rb:532:in `call' 
warden (1.1.0) lib/warden/manager.rb:35:in `block in call' 
warden (1.1.0) lib/warden/manager.rb:34:in `catch' 
warden (1.1.0) lib/warden/manager.rb:34:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call' 
rack (1.3.6) lib/rack/etag.rb:23:in `call' 
rack (1.3.6) lib/rack/conditionalget.rb:25:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/head.rb:14:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/params_parser.rb:21:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/flash.rb:247:in `call' 
rack (1.3.6) lib/rack/session/abstract/id.rb:195:in `context' 
rack (1.3.6) lib/rack/session/abstract/id.rb:190:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/cookies.rb:331:in `call' 
activerecord (3.1.3) lib/active_record/query_cache.rb:64:in `call' 
activerecord (3.1.3) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' 
activesupport (3.1.3) lib/active_support/callbacks.rb:392:in `_run_call_callbacks' 
activesupport (3.1.3) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (3.1.3) lib/action_dispatch/middleware/callbacks.rb:28:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/reloader.rb:68:in `call' 
rack (1.3.6) lib/rack/sendfile.rb:101:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/remote_ip.rb:48:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call' 
railties (3.1.3) lib/rails/rack/logger.rb:13:in `call' 
rack (1.3.6) lib/rack/methodoverride.rb:24:in `call' 
rack (1.3.6) lib/rack/runtime.rb:17:in `call' 
activesupport (3.1.3) lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
rack (1.3.6) lib/rack/lock.rb:15:in `call' 
actionpack (3.1.3) lib/action_dispatch/middleware/static.rb:53:in `call' 
railties (3.1.3) lib/rails/engine.rb:456:in `call' 
rack (1.3.6) lib/rack/content_length.rb:14:in `call' 
railties (3.1.3) lib/rails/rack/log_tailer.rb:14:in `call' 
rack (1.3.6) lib/rack/handler/webrick.rb:59:in `service' 
/Users/mac/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service' 
/Users/mac/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run' 
/Users/mac/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread' 
+0

什么是完整错误?我试图重新创建这个问题,但还没有成功。 – philt5252 2012-03-03 16:08:21

+0

NoMethodError(#未定义的方法'仪表板') – coletrain 2012-03-03 16:58:05

+0

视图或布局是否包含对'profile.dashboards'的调用,该profiled应该是'profile.dashboard?也许是一个错字? – iltempo 2012-03-03 17:57:03

回答

2

当您使用load_authorize_resource惨惨呈现多个资源(即配置文件有很多仪表板)。根据文档添加:singleton => true关闭此功能

+0

猜猜是这个问题,谢谢!我被困在这2天 – coletrain 2012-03-04 18:52:51