私はこのようなモデル構造を持っています。
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_iduser_id
最終的に、より深いレベルのネスティングは不要であると判断し、注文アイテム自体にメモを含めたので、モデルは次のようになります。
User
|
+-- Order
|
+-- OrderItem (which includes a note)