1

我有一個數據庫設置,有許多用戶,其中有成員或管理員的角色。每個用戶有很多車。每輛車都有很多次滑行隨着CanCan,我如何限制基於關聯/子屬性的能力

那麼,如何限制用戶編輯時速表的能力,只有當他是父車的車主。

在康康舞:

class Ability 
    include CanCan::Ability 

    def initialize(user) 
     user ||= User.new # guest user (not logged in) 
     if user.has_role? :admin 
      can :manage, :all 
     elsif user.has_role? :member 
      can :manage, Car, :user_id => user.id 
      can :manage, Timeslip, :car => {:user_id => user.id} 
     end 
    end 
end 

太行can :manage, Timeslip, :car => {:user_id => user.id}是我需要一些幫助。

因爲Timeslip是汽車的協會/孩子,我需要檢查其父car.user_id =的康康舞USER.ID

我想我怎麼寫的,這是符合康康舞文檔,但在那裏我錯了嗎?

回答

2

有可能是把它寫一個較短的方式,但是這將工作:

can :manage, Timeslip do |timeslip| 
    timeslip.car.user_id == user.id 
end 
+0

我得到'未定義的方法「user_ID的」爲無:NilClass' –

+0

這意味着你有一個沒有車相關的時間片。 – Robin

+0

我將此更改爲'can [:edit,:update,:destroy],Timeslip do | timeslip | timeslip.user ==用戶 結束,現在它的工作。我使用我的** has_one:user,:through =>:car **出於某種原因,它沒有找到汽車協會?但我可以看到它與調試...不知道 –

0

這是什麼工作對我來說:can :manage, Timeslip, car: { roles: { id: user.role_ids } }