2012-01-02 37 views
1

私はこのようになりますroutes.rbありますカンカン深くネストされたリソース

resources :restaurants, :shallow => true do 
    resources :orders do 
    resources :foods 
    end 
    resources :categories do 
    resources :foods 
    end 
end 

ability.rb作品でこのような何かを、

if user.role? :owner 
    can :manage, Category, :restaurant => {:user_id => user.id} 
    ... 

が、より深いネストが浅いネスティングに問題が表示されます。

can :manage, Food, :category => {:restaurant => {:user_id => user.id}} 
end 

CanCanに最終的な例のように深いネスティングを処理させる方法はありますか?

答えて

1

私は考えられません。あなたはブロックを使用してそれを自分で行う必要があります:
https://github.com/ryanb/cancan/wiki/Defining-Abilities-with-Blocks

can :manage, Food do |food| 
    food.categories.joins(:restaurant).where("restaurants.user_id = ?", user.id).any? 
end 

は、あなたが正確に何をしたいですか?ユーザーは、カテゴリーによってユーザーが所有するレストランに属している場合にのみ、食品を管理できますか?

+0

はい、まさに私が欲しいものです!私はブロックで能力を調べます。あなたはそれが可能であると思いますか、私のモデルにいくつかの変更を加えなければなりませんか? – patrickdet

+0

何とかうまくいくよ。ありがとうございました。私はdeclaratice_authorizationに切り替えましたが、ネストはその宝石との面倒なことではないので。とにかくありがとうございました。 – patrickdet

関連する問題