CanCan可以深度嵌套资源

时间:2012-01-02 19:05:08

标签: ruby-on-rails ruby cancan nested-resources

我的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 个答案:

答案 0 :(得分: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

你到底想要什么?如果用户属于用户所拥有的餐馆,则用户只能管理食品吗?