我有一个这样的模型结构。
User
|
+-- Order
|
+-- OrderItem
|
+-- OrderItemNote
订单与用户有直接关系,所以我可以:user_id => user.id
在Ability
课堂上做User.role? :customer
(例如)让他们编辑自己的订单。
但是,没有添加:user_id
列OrderItem
,OrderItemNote
我不知道如何配置 CanCan 以允许用户编辑自己的对象OrderItem
和OrderItemNote
对象。
任何人都可以帮忙吗?
更新:
我选择了 jvnill 的答案,因为我使用的是 RailsAdmin(而且做一个 Ability 类比 . 更简单load_resource
。在正常情况下,CanCanload_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
并且似乎 CanCan 将更深层次的引用(即order
在这种情况下)视为数据库字段引用,而不是通过模型(我尝试了一些使用虚拟属性等的技巧来提供一个order_id
或什至user_id
除了真实数据库字段之外的任何东西名称无法识别。) - 我在有限的时间内进一步调查此问题,我将这些笔记留给我自己,以便稍后查看。
最后我认为没有必要进行更深层次的嵌套,并将注释包含在订单项本身中,因此模型如下:
User
|
+-- Order
|
+-- OrderItem (which includes a note)