过滤CanCan的索引

时间:2013-09-17 19:30:38

标签: ruby-on-rails ruby ruby-on-rails-3 cancan wice-grid

我正在尝试根据能力过滤索引。我使用wice_grid gem在索引中创建表,并为票证添加条件,我们可以使用名为:conditions的东西。

我试图这样说:

@tickets_grid = initialize_grid(Ticket,
                                :include => [:user, :employee_department, :state],
                                :conditions => [Ticket.accessible_by(current_ability)])
但是,这不起作用。我正在寻找任何建议。

更新::conditions的工作方式与ActiveRecord类似,所以我想我需要一个查询来查找角色并检测当前的能力

2 个答案:

答案 0 :(得分:1)

您正在寻找的是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

答案 1 :(得分:0)

从您链接到的文档部分:

  

或者,您可以代替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))。但是,您应该已经由CanCan初始化@tickets,因此您只需要initialize_grid(@tickets)