【问题标题】:Filter index for CanCanCanCan 的过滤器索引
【发布时间】:2013-09-17 19:30:38
【问题描述】:

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

我试过这样说:

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

但是,这不起作用。我正在寻找任何建议。

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

      【解决方案2】:

      来自您链接到的文档部分:

      或者,您可以代替 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)

      【讨论】:

      • 没用,我猜那是因为 wice 网格不接受 @tickets
      • 我猜它应该在 :conditions 中,你说它是一个关系,所以我需要一个条件(因为像活动记录这样的条件)让它查看数据库字段,我正在使用单独的角色模型,用户通过分配有许多角色
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2011-10-05
      • 2018-03-01
      相关资源
      最近更新 更多