2013-08-27 68 views
0

我正在使用CanCan向Rails 4應用程序授予對用戶的訪問權限,並且我正在研究can塊,但它似乎沒有寫得很好,我猜它的僞代碼,它的如何我希望有能力工作。它可以改變爲更好還是更高效地工作?我也試圖避免不必要的問題,這可能會使請求花費更長的時間來處理。CanCan訪問塊

can :manage, User do |u| 
    u.id.eql?(user.id) || u.account.founders.includes(u) || u.account.collaborators.includes(u) 
end 

回答

2

你幾乎已經在這裏得到了正確的代碼。下面是我該怎麼做:

can :manage, User do |u| 
    u.id == user.id || 
    u.account.founders.exists?(u.id) || 
    u.account.collaborators.exists?(u.id) 
end 

比較使用==是Ruby中的標準。 eql?很少使用。

如果數據庫在這些記錄中包含該ID,則exists?方法將執行輕量級數據庫查詢並返回true。您之前如何做是錯誤的,因爲includes是一種用於熱切加載關聯的ActiveRecord方法。即使您使用了類似的include?方法,它仍然會加載該帳戶的所有創建者和協作者,然後使用Ruby來檢查這些集合是否包含該用戶。

+1

感謝您的支持 – ny95