2

私はモデルOwnerShopおよびを持っていますItem

OwnerたくさんShopsあり、ShopsたくさんありItemsます。

カンカンでの私の能力:

can :manage, Shop, owner_id: user.id
can :manage, Item, shop: {owner_id: user.id}

rails_admin ダッシュボードを開くと、ゼロItemsでページList of Itemsが空であると表示されます。

ただし、ショップページを開くと、すべてのアイテムが表示され、ショップページで変更できます。

次のようにコードを書くと:

  can :manage, Item do |item|
    item.shop.owner_id == user.id
  end

それは私にエラーをスローします:

The accessible_by call cannot be used with a block 'can' definition. The SQL cannot be determined for :index Item

Itemsすべてのオンを一覧表示できないのはなぜItems Listですか?

4

1 に答える 1

0

私は1つの解決策を見つけました。

Itemモデルにフィールドを追加する必要があります。

field :shop_owner_id, type: String

次に、それを割り当てる必要があります。

 before_save :set_shop_owner_id

 def set_shop_owner_id
   self.shop_owner_id = self.shop.owner.id.to_s
 end

私のability.rbファイルでは、これを追加する必要がありました:

can :manage, Item, shop_owner_id: user.id

rails_adminつまり、 wnats が現在の所有者に属するショップに属するすべてのアイテムをインデックスに登録しようとすると、何らかのエラーが発生します。これは、それを回避するのに役立ちます。

良い解決策ではないと思いますが、うまくいきます。

于 2015-07-29T05:15:10.690 に答える