Rails_admin,使用 cancan 时模型列表显示为零

Rails_admin, List of models show zero when using cancan

我有模型 OwnerShopItem

Owner 有很多 ShopsShops 有很多 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 List 上列出我所有的 Items

我找到了一种解决方案。

我需要向我的 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 索引所有属于当前所有者的商店的项目时出现某种错误。这有助于避免它。

我认为不是很好的解决方案,但有效。