これが私の能力の定義です:
can :manage,Order,:store => {:business_district => {:district_manager_id => user.id}}
そして、次の方法でリソースをロードするとき:
Order.accessible_by(current_ability)
次のような SQL を生成します。
SELECT COUNT(*) FROM `orders` INNER JOIN `stores` ON `stores`.`id` = `orders`.`store_id` INNER JOIN `business_districts` ON `business_districts`.`id` = `stores`.`business_district_id` WHERE (`stores`.`business_districts` = '---\n:district_manager_id: 37\n')
「where」のコードを除いて、SQLはすべて問題ないように見えます。私はそれを機能させる方法がわかりませんここはモデル関係です
1. store belongs_to business_district
2. order belongs_to store
3. business_district has district_manager_id
そして、business_district のすべての注文を確認したい
私はこれについてのトピックを見つけました:[CanCan深くネストされたリソースですが、 cancan でブロック定義を使用する場合、accessible_by(current_ability)ロードリソースを使用できません! そして、あなたはOrder.joins(:store => :business_district).where("district_manager_id = ?",current_user.id)
私が欲しいものをロードするために使用することができます! cancan gemがこのようにできる方法はありますか?