Rails admin, список моделей показывает ноль при использовании 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 на Items List?

495   1  

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 индексировать все товары, которые принадлежат магазину, который принадлежит текущему владельцу. Это помогает избежать его.

Не очень хорошее решение, я думаю, но работает.

Comments

    Ничего не найдено.