我有這樣的模型結構。使用CanCan如何授權用戶編輯關聯的子模型?
User
|
+-- Order
|
+-- OrderItem
|
+-- OrderItemNote
訂單保存與用戶有直接關係,這樣我就可以在Ability
類User.role? :customer
做:user_id => user.id
(例如),讓他們編輯自己的訂單。
然而,短期加:user_id
列OrderItem
和OrderItemNote
的我不知道如何慘慘配置爲允許用戶自行編輯OrderItem
和OrderItemNote
對象。
任何人都可以幫忙嗎?
更新:
我jvnill的答案去了,因爲我使用RailsAdmin(和它的簡單做一個能力類,而不是一個load_resource
在正常情況下,康康舞的load_resource
是一個更好的路要走。
注意:在嵌套的第一級由處理:
can :manage, OrderItem, order: { user_id: user.id }
更深層次的嵌套...:
can :manage, OrderItemNote, order_item: { order: { user_id: user.id } }
...扔了SQL錯誤
no such column: order_items.orders
,看來,把黃燦燦的更深層次的引用(即。 order
在這種情況下)作爲數據庫字段引用,而不是通過模型(我嘗試了一些虛擬屬性等技巧來提供order_id
甚至user_id
,但真正的數據庫字段名稱以外的任何東西都無法識別。) - 在有限的時間內進一步調查,我將留下這些筆記,爲我自己,所以我可以稍後再研究它。
在最後,我決定更深層次的嵌套是不必要的,並且包含在訂單項目本身的說明,因此該模型是像這樣:
User
|
+-- Order
|
+-- OrderItem (which includes a note)
你通過整個供應鏈LAOD oder_item_notes? – apneadiving 2013-02-20 10:51:44
@apneadiving - 你是什麼意思? - 根據您的需要,用戶可以參考Order(belongs_to:user),OrderItem(belongs_to:order)和OrderItemNote(belongs_to:order_item) – ocodo 2013-02-20 10:55:16
,加載所有中間對象並且可以作爲內置方法執行它可能是有意義的。按照這種方式進行,您可以在訂單級進行授權。 – apneadiving 2013-02-20 11:04:07