问题
I am trying to filter the index according to the ability. I am using the wice_grid gem to make a table in the index, and to add a condition to tickets, we could use something called :conditions.
I have tried to put it like that:
@tickets_grid = initialize_grid(Ticket,
:include => [:user, :employee_department, :state],
:conditions => [Ticket.accessible_by(current_ability)])
This is not working, though. I'm looking for any suggestions.
Update: :conditions
is working like ActiveRecord
so I guess I need a query to look up through roles and detect the current ability
回答1:
What you are looking for is current_ability.model_adapter(Ticket, :index).conditions where Ticket is your model and :index is your access type.
so in your case it should be:
@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
回答2:
From the section of the documentation you linked to:
Alternatively, instead of a Class object as the first parameter, you can use ActiveRecord::Relation:
@tasks_grid = initialize_grid(Task.where(:archived => false, :projects => {:active => true}).joins(:project) )
Ticket.accessible_by(current_ability)
is a relation, not a hash of conditions, so you would do initialize_grid(Ticket.accessible_by(current_ability))
. But you should already have @tickets
initialized by CanCan, so you just need to initialize_grid(@tickets)
.
来源:https://stackoverflow.com/questions/18858352/filter-index-for-cancan