2

が属しているアプリにUser取り組んでいOrganizationます。テーブルを介して、 has_and_belongs_to_manyOrganization製品organizations_products

User特定の役割を持つ が の製品を管理できるようにしたいと考えていOrganizationます。でability.rb

def initialize(user)
  # ...snip unrelated stuff
  elsif user.is_manager?
    can :manage, Product, do |product|
      user.organization.products.include?(product)
    end

これは私がやりたいことを説明していますが、製品コントローラーで例外が発生します:

def index
    @products =  Product.accessible_by(current_ability)
end

アビリティ定義acessible_by のブロックでは使用できないためです。と互換性のある方法でこの能力をどのように書くことができaccessible_byますか?

4

1 に答える 1

0
can :manage, Product, user.organization.products do |product|
  user.organization.products.include?(product)
end

明確にするために: CanCan は、バージョン 1.6 で、accessible_by によって使用されるスコープとして理解できる 3 番目のパラメーターを追加しました。の評価can :manage, @a_specific_productに使用されるブロック。スコープまたはブロックのいずれかを使用する場合は、おそらく両方を使用する必要があります。

参照: this question、これは主に this one の複製であり、 docs .

于 2013-08-28T18:07:38.387 に答える