Индекс фильтра для CanCan

Я пытаюсь отфильтровать индекс в соответствии со способностью. Я использую гем wice_grid, чтобы создать таблицу в индексе и добавить условие к заявкам, мы можно использовать что-то под названием :conditions.

Я попытался выразить это так:

@tickets_grid = initialize_grid(Ticket,
                                :include => [:user, :employee_department, :state],
                                :conditions => [Ticket.accessible_by(current_ability)])

Однако это не работает. Я ищу любые предложения.

Обновление: :conditions работает как ActiveRecord, поэтому мне нужен запрос для просмотра ролей и определения текущей способности.


person Mostafa Hussein    schedule 17.09.2013    source источник


Ответы (2)


То, что вы ищете, это current_ability.model_adapter(Ticket, :index).conditions, где Ticket — это ваша модель, а :index — ваш тип доступа.

поэтому в вашем случае это должно быть:

@tickets_grid = initialize_grid(Ticket,:include => [:user, :employee_department, :state],:conditions => current_ability.model_adapter(Ticket, :index).conditions)

https://github.com/ryanb/cancan/wiki/Fetching-Records

person Konstantin Voronov    schedule 08.10.2014

Из раздела документации, на которую вы ссылались:

В качестве альтернативы вместо объекта Class в качестве первого параметра можно использовать ActiveRecord::Relation:

@tasks_grid = initialize_grid(Task.where(:archived => false, :projects => {:active => true}).joins(:project) )

Ticket.accessible_by(current_ability) — это отношение, а не хэш условий, поэтому вы должны сделать initialize_grid(Ticket.accessible_by(current_ability)). Но у вас уже должно быть @tickets инициализировано CanCan, так что вам просто нужно initialize_grid(@tickets).

person graywh    schedule 18.09.2013
comment
не сработало, я думаю, это потому, что wice grid не принимает @tickets - person Mostafa Hussein; 18.09.2013
comment
я предполагаю, что это должно быть в: условия, вы сказали, что это отношение, поэтому мне нужно условие (потому что условия, такие как активная запись), чтобы он просматривал поля базы данных, я использую отдельную ролевую модель, пользователи имеют много ролей через назначения - person Mostafa Hussein; 19.09.2013