Rail 的康康康深 has_many 通过

Rail's cancancan deep has_many through

当 User 和 ClassD 之间的关联变深时,我在定义能力时遇到问题。

User < ActiveRecord::Base 
  has_many :classB
  has_many :classC, through classB
  has_many :classD, through classB
end
ClassB < ActiveRecord::Base
  belongs_to :User
  has_many :classC
  has_many :classD, through classC
end 
ClassC < ActiveRecord::Base
  belongs_to ClassC
  has_many :ClassD
end
ClassD < ACtiveRecord::Base
  belongs_to Class C
end

如何用 cancancan 定义能力,例如:

class Ability
  include CanCan::Ability

  def initialize(user) 
    user ||= User.new      
    can :manage, ClassD do |cd|
      cd.user_id: user.id
    end

  end
end
class Ability
  include CanCan::Ability

  def initialize(user) 
    user ||= User.new      
    can :manage, ClassD do |cd|
      user.cds.exists?(cd.id)
    end

  end
end