【发布时间】:2014-06-19 07:37:13
【问题描述】:
我有一个针对活跃管理员的自定义洗劫过滤器:
# app/admin/user.rb
filter :by_solr_in, :as => :string
使用 solr 进行搜索:
# app/models/user.rb
ransacker :by_solr, formatter: -> (v) {
ids = UserSearch.all({params: {q: v}, state: :all}).results.map(&:id)
ids.present? ? ids : nil
} do |product|
product.table[:id] # i think collection shoud be paginated here
end
Solr (UserSearch.all) 将所有找到的用户作为 id 的集合,product.table[:id] 从 db 中获取具有这些 id 的用户。问题是没有分页。活动管理员仅显示正确的页面,但每个页面的整个集合都来自 db。我该如何纠正这个问题?
我尝试在 before_filter 中将页面传递给 solr 并在那里使用它,但如果 solr 仅提供 1 个页面,则活动管理员仅获得 1 个页面。
ids = UserSearch.all({params: {q: v['q'], page: v['page'], per_page: 30}, state: :all}).results.map(&:id)
【问题讨论】:
标签: ruby-on-rails solr activeadmin ransack