在 ActiveAdmin 中过滤时跳过默认范围

Skip default scope when you filtering in ActiveAdmin

我在 ActiveAdmin 中有一个默认范围,不包括 'pending' 状态,因为我们有很多这种状态,默认情况下我们不想看到它。但是当我们通过过滤器搜索时,我们想跳过这个默认范围并包括 'pending' 状态。如何做到这一点?

我的模型:

class MyModel < ActiveRecord::Base
   validates :status, presence: true,
                      inclusion: { in: %w(pending published accepted declined cancelled) } 
   scope :published, lambda {
      where("bookings.published_at IS NOT NULL")
   }   
end

ActiveAdmin 模型:

ActiveAdmin.register MyModel do
  actions :index, :show

  config.sort_order = "locked_at_desc"
  config.scope :published, default: true

  index do
    column :id
    column :status
    actions
  end
end

您需要在管理文件中添加 :all 范围。然后您可以通过过滤器进行搜索,该过滤器将 包含 :all 范围 下的 pending 状态。如果您需要加速加载所有记录,您可以在 :all 范围内提供 show_count: false

ActiveAdmin.register MyModel do
  ...
  scope :published, default: true
  scope :all # scope :all, show_count: false
  ...
end