2012-01-02 72 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 2012-01-02 19:35:48

+0

是的,以某種方式工作。謝謝。儘管我切換到declaratice_authorization,因爲嵌套並不是那個寶石的麻煩。不管怎樣,謝謝你。 – patrickdet 2012-01-03 21:21:07