1

如何将cancan,inherited_resources和单个表继承一起使用? 我有类似的代码这个例子:CanCan,InheritedResources和STI

class Contact < ActiveRecord::Base; end 
class Person < Contact; end 
class Company < Contact; end 

class Ability 
    include CanCan::Ability 
    def initialize(user) 
    user ||= User.new # in case of guest 
    can :read, Contact # User can read People and Companies 
    can :create, Person # User can create Person only 
    can :manage, :all if user.has_role? :admin 
    end 
end 

class ContactsController < InheritedResources::Base 
    load_and_authorize_resource 
    def new 
    @contact = contact_sti.new 
    end 

    private 
    def clazz 
    self.params[:contact_type].nil? ? "contact" : self.params[:contact_type] 
    end 
    def contact_sti 
    clazz.camelize.constantize 
    end 
end 

当我尝试为用户创建人,我得惨惨::存取遭拒。这是因为InheritedResources使用Contact作为:resource_class。

回答

2

我发现这个解决方案:

class ContactsController < InheritedResources::Base 
    alias :resource_class :contact_sti 
end