CanCan глубоко вложенные ресурсы - PullRequest
1 голос
/ 02 января 2012

У меня есть 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 Ответ

1 голос
/ 02 января 2012

Я не думаю, что это возможно. Вам придется сделать это самостоятельно, используя блок:
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

Что вы хотите именно? Пользователи могут управлять едой, только если она принадлежит ресторану, принадлежащему пользователю, хотя и по категориям?

...