私はこのようなモデル構造を持っています。
User
|
+-- Order
|
+-- OrderItem
|
+-- OrderItemNote
Order は User と直接関係があるため:user_id => user.id
、Ability
クラスでUser.role? :customer
(たとえば) 自分の注文を編集できるようにすることができます。
ただし、:user_id
列を追加するだけOrderItem
でOrderItemNote
はなく、ユーザーが自分のオブジェクトOrderItem
とOrderItemNote
オブジェクトを編集できるように CanCan を構成する方法がわかりません。
誰でも助けてもらえますか?
アップデート:
私はRailsAdminを使用しているため、jvnillの回答を使用しました(そして、よりもAbilityクラスを実行する方が簡単ですload_resource
。通常の状況では、CanCanの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
そして、CanCan は、モデルを通じてではなく、より深いレベルの参照 (つまり、この場合) をデータベース フィールド参照として扱うようです(実際のデータベース フィールド以外のものを提供するために、仮想属性などを使用していくつかorder
のトリックを試しました)。名前が認識されません。) - これをさらに調査する時間が限られています。後で調べることができるように、自分用にこれらのメモを残しておきます。order_id
user_id
最終的に、より深いレベルのネスティングは不要であると判断し、注文アイテム自体にメモを含めたので、モデルは次のようになります。
User
|
+-- Order
|
+-- OrderItem (which includes a note)