默认的ActiveAdmin过滤器不会过滤我的索引表

时间:2017-03-30 07:49:45

标签: ruby-on-rails-4 filter activeadmin

我有一个应用程序,您可以在其中填写文档的元数据。我目前在使用默认过滤时遇到问题,因为它没有过滤我的索引表。过滤器选项显示在右侧,您也可以在选择过滤器并点击按钮后在url和params中看到过滤选项。

utf8=✓&q%5Buser_id_eq%5D=3&commit=Filter&order=id_desc

但不知何故,索引表并没有刷新。

我唯一的范围是默认范围:

  scope :all, default: true

修改

我认为它与分页有关,因为如果我删除分页,过滤器会再次运行。

这是我app / admin / DocumentType.rb文件中的当前索引方法:

def index
  index! do |format|
    @document_types = DocumentType.where(archived_at: nil).page(params[:page])
    file_name = "document_types_#{DateTime.now.strftime('%a_%d_%b_%Y_%H%M%S').downcase}"

    format.xls {
      spreadsheet = DocumentTypesSpreadsheet.new @document_types
      send_data spreadsheet.generate_xls, filename: file_name + ".xls"
    }
  end
end

只有未归档的文档类型才会显示在索引中,因此我有

@document_types = DocumentType.where(archived_at: nil).page(params[:page])

现在有了这个我的过滤器不能正常工作。但是,如果我完全删除这一行,它们会再次起作用,除非现在它还显示已归档的文档类型。如果我删除.page(params[:page])部分,我会收到以下错误消息:

 Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.

1 个答案:

答案 0 :(得分:0)

尝试使用此

更新您的控制器
def index
  index! do |format|
    @document_types = DocumentType.where(archived_at: nil).ransack(params[:q]).result
    file_name = "document_types_#{DateTime.now.strftime('%a_%d_%b_%Y_%H%M%S').downcase}"

    format.xls {
      spreadsheet = DocumentTypesSpreadsheet.new @document_types
      send_data spreadsheet.generate_xls, filename: file_name + ".xls"
    }
  end
end

但是你需要确定,你也可以用这个条件显示记录:

.where(archived_at: nil)

因为导出的结果与显示的

不同