Rails_admin,使用 cancan 时模型列表显示为零
Rails_admin, List of models show zero when using cancan
我有模型 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 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 索引所有属于当前所有者的商店的项目时出现某种错误。这有助于避免它。
我认为不是很好的解决方案,但有效。
我有模型 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 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 索引所有属于当前所有者的商店的项目时出现某种错误。这有助于避免它。
我认为不是很好的解决方案,但有效。