我有模型Owner
,Shop
和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
?
答案 0 :(得分:0)
我找到了一个解决方案。
我需要在我的Item
模型中添加additinal字段:
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索引所有商品时会出现某种错误,这些商品属于属于当前所有者的商店。这有助于避免它。
我认为不是很好的解决方案,但有效。