Ruby on rails 3.1 轨道&x2B;坎坎+;多态关联未按预期工作

Ruby on rails 3.1 轨道&x2B;坎坎+;多态关联未按预期工作,ruby-on-rails-3.1,cancan,polymorphic-associations,Ruby On Rails 3.1,Cancan,Polymorphic Associations,我试图让cancan与多态关联一起工作,我已经阅读了文档和wiki,但无法让它工作 我有以下型号: class User < ActiveRecord::Base has_many :areas, :as => :owner, :dependent => :destroy end class Account < ActiveRecord::Base has_many :areas, :as => :owner, :depend

我试图让cancan与多态关联一起工作,我已经阅读了文档和wiki,但无法让它工作

我有以下型号:

class User < ActiveRecord::Base
  has_many :areas, :as => :owner, :dependent => :destroy            
end 

class Account < ActiveRecord::Base  
  has_many :areas, :as => :owner, :dependent => :destroy
end

class Area < ActiveRecord::Base   
  belongs_to :owner, :polymorphic => true
end
“新建”和“创建”操作对于“用户”区域和“帐户”区域都非常有效,但当我尝试转到“区域索引”操作时,我会出现以下错误:

NameError in AreasController#index

uninitialized constant Owner

有什么想法吗?非常感谢

考虑到您的类被称为
所有者
,也许您可以尝试以下方法:

load_resource :user, :instance_name => :owner, :class=>'User'
load_resource :account, :instance_name => :owner, :class=>'Account'
load_and_authorize_resource :area, :through => :owner
如果不起作用,请查看此问题是否解决了您的问题:

根据票据,如果您使用的是1.3或更高版本,则可以执行以下操作:

load_resource :user
load_resource :account
load_and_authorize_resource :area, :through => [:user, :account]
但是在这种情况下,您的
authorize\u parent
方法会更改如下:

def authorize_parent
  authorize! :manage, (@user||@account)
end    
有关详细文档,请参见以下标题
多态关联


让我知道是否适合你。安迪干杯

你能粘贴你的控制器代码吗?对不起,这有点疏忽。。。
load_resource :user
load_resource :account
load_and_authorize_resource :area, :through => [:user, :account]
def authorize_parent
  authorize! :manage, (@user||@account)
end