ActiveAdmin限制索引页面上的记录

时间:2014-01-25 10:53:26

标签: ruby-on-rails activeadmin

我的模型中有大约10,000多条记录。在该模型的active_admin索引页面中,我设置了config.paginate = false。因此,默认情况下会显示所有10,000多条记录。

如何限制最后500条记录的数量。我尝试使用下面描述的方法here,但它没有对索引页做任何事情。

ActiveAdmin.register Post do
  controller do
    def scoped_collection
      Post.all.limit(500)
    end
  end
end

5 个答案:

答案 0 :(得分:3)

使用控制器before_filter

在页面上设置自定义行数
controller do

   before_filter :set_per_page_var, :only => [:index]

   def set_per_page_var
     session[:per_page]=params[:per_page]||30
     @per_page = session[:per_page]
   end
end

并使用相应的文本输入呈现侧边栏(您可以将其渲染为下拉列表)

#...

sidebar('Rows on page', :only => :index) do
  form do |f|
    f.text_field nil, 'per_page', :value => session[:per_page]
  end
end

答案 1 :(得分:1)

活动管理中的问题是this code

module ActiveAdmin
  class ResourceController < BaseController
    module DataAccess

      def per_page
        return max_csv_records if request.format == 'text/csv'
        return max_per_page if active_admin_config.paginate == false

        @per_page || active_admin_config.per_page
      end

      def max_csv_records
        10_000
      end

      def max_per_page
        10_000
      end

    end
  end
end

paginate配置选项设置为false时,默认为max_per_page返回的数字值。如果你可以全局覆盖它,你可以把它放在初始化器中:

# config/initializers/active_admin_data_access.rb
module ActiveAdmin
  class ResourceController < BaseController
    module DataAccess

      def max_per_page
        500 # was 10,000
      end

    end
  end
end

答案 2 :(得分:1)

我一直在寻找这个问题的答案。我无法限制记录的数量,因此我选择在我的一个过滤器中放置一个默认值,以保证加载时的空页。

(注意:我从这里的stackoverflow问题中偷走了这个想法:: Set ActiveAdmin filter default value

实施例:: 在这个例子中,如果所有参数都是空白的话,我在“before_filter”方法中设置一个名为“my_filter_id”的过滤器等于“0”。

ActiveAdmin.register MyModel do
  before_filter my_filter_id: :index do
    params[:q] = {my_filter_id_eq: 0} if params[:commit].blank?
  end
end

答案 3 :(得分:0)

使用 Post.limit(500)而非Post.all.limit(500),因此可以最大程度地减少延迟。

controller do
  def scoped_collection
    Post.limit(500)
  end
end

index :pagination_total => false do
  selectable_column
  column :id
  column :user_name
  column :country
  column :city
end

希望这会对某人有所帮助。

答案 4 :(得分:-2)

尝试以下代码。用您的型号替换一些东西。

result = Something.find(:all, :order => "id desc", :limit => 5)

while !result.empty?
    puts result.pop
end