我要解决分页的问题 也就是只显示前 100 页 举例来说
names = ["Bozhidar", "Steve", "Sarah"] names.each do |n| puts n end
以上属于傻缺模式 解决方法还在找
names.first(2).each do |n| puts n end
#1 楼 @Rei 真快!thanks!
分页应该是这个更合适吧?
limit = 40 [ ].each_slice(limit).each do |i| ap i end
还有个方法就是 break
names.each_with_index do |n, i| puts n break if i == 2 end
names[0,n].each do |x| puts x end
#3 楼 @mimosa 额 貌似我的情况还不太好解决。。。让我整理整理 看看怎么说比较清楚 #4 楼 @luikore #1 楼 @Rei
恩 是这样滴
#controller @search = User.solr_search do #一大波代码 paginate :page => param[:page], :per_page => 10 end @re = @search.results
#views <table> <% @re.each do |r| %> <tr> <td><%= r.name %></td> </tr> <% end %> </table> <%= "总数:#{number_with_delimiter(@search.total)}"%> <%= paginate @re %>
如果改成@re = @search.results.first(1000)会报错 undefined method ‘current_page' for #<Array 但@search.results本身也是 Array 啊。。。 现在的结论是因为分页数据在之前就完成了 所以后来截取一段造成错误...什么的 想来想去觉得好像只有在paginate :page => param[:page], :per_page => 10这句设定一个上限 才能解决
@re = @search.results.first(1000)
undefined method ‘current_page' for #<Array
paginate :page => param[:page], :per_page => 10
看顶楼我就奇怪了,数组取前两个跟分页没啥关系。
这个问题是要把 solr 返回的数组拼装成分页插件能理解的集合对象。
#7 楼 @Rei -_-、我太天真了
#8 楼 @ChanceDoor 首先查询过程是交给搜索引擎插件执行的,ActiveRecord 的分页插件的 :page :per_page 参数只能转换为数据库查询,所以要自己转换 :limit,:offset 这些参数输入给搜索引擎的查询。
然后搜索引擎查询会返回一个结果集,包含结果数组,和 limt、offset、total_count 之类的信息,用这些信息组装一个分页插件能理解的结果集对象。具体要看分页插件的文档或者源码。