Ruby on rails 当嵌套模型的名称与控制器名称不同时,如何使用cancan加载嵌套资源?
假设我有一个嵌套在农场模型下的工人模型,那么如何在工人控制器(称为FarmWorkersController)中正确加载工人资源?我试过这个Ruby on rails 当嵌套模型的名称与控制器名称不同时,如何使用cancan加载嵌套资源?,ruby-on-rails,authorization,cancan,Ruby On Rails,Authorization,Cancan,假设我有一个嵌套在农场模型下的工人模型,那么如何在工人控制器(称为FarmWorkersController)中正确加载工人资源?我试过这个 class FarmWorkersController < ApplicationController load_resource :farm, :parent => true load_resource :class => 'Worker', :through => :farm, :parent => false
class FarmWorkersController < ApplicationController
load_resource :farm, :parent => true
load_resource :class => 'Worker', :through => :farm, :parent => false
# Note that :parent and :class need to be specified on the Worker resource line,
# as the name of the controller (FarmWorkersController) is different from Worker model name
end
class FarmWorkersControllertrue
加载\u资源:类=>'Worker',:到=>:farm,:parent=>false
#请注意:parent和:class需要在Worker资源行上指定,
#因为控制器(FarmWorkersController)的名称不同于工作者模型名称
结束
。。。但是我得到了错误
undefined method `farm_workers' for #<Farm:0xa87670c>
未定义的方法“农场工人”#
请注意,如果我在农场模型中定义了一个farm_workers()getter,该getter返回工人集合,那么我不会得到错误-尽管没有为索引操作加载工人集合。在任何情况下,我都不想为了使控制器身份验证工作而污染我的模型
(这没关系,但我使用的是mongoid)未经测试,但根据文档/代码,您应该能够将名称指定为加载资源的第一个参数:
load_resource :worker, :class => 'Worker', :through => :farm, :parent => false
谢谢Andy,我尝试了你的答案(使用load_resource:worker而不是load_resource“workers”)。这似乎奏效了!我基本上忽略了第一个论点。谢谢