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 处理与上一个示例一样深的嵌套的任何想法?

4

1 回答 1

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

你到底想要什么?用户只能通过类别管理属于用户拥有的餐厅的食物吗?

于 2012-01-02T19:31:28.940 回答