我的模型中有大约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
答案 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