1

cancan、inherited_resources、および単一テーブルの継承を一緒に使用するにはどうすればよいですか?私は人を作成するために、ユーザーとしてしようとするとCanCan、InheritedResources and 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