我正在使用will_paginate gem在无限/无限滚动页面上对产品进行分页。分页工作正常。
但是为什么我尝试对该页面上列出的产品进行排序,只有已经加载到该点的产品才会被排序,剩余的产品在加载后会以随机顺序显示。
以下是我的控制器,排序是基于order
参数:
def index
@order = params[:order]
@query = params[:tag]
@taxon = params[:taxon]
if @order.nil?
@order = "relevance"
end
@products = queryTags(params, @taxon)
if ! @products.nil?
if @order == "pricelow"
@products = @products.sort_by{ |k| k['variants'][0]['Price'] }
elsif @order == "pricehigh"
@products = @products.sort_by{ |k| -k['variants'][0]['Price'] }
elsif @order == "relevance"
@products = @products.sort_by{ |k| -k['productRelevance'] }
elsif @order == "pop"
@product_group = @products.map{|product| product['id']}
@result = Product.where(id: @product_group).descend_by_popularity
@products = @result.map{|r| @products.find{|p| p['id'] == r['id']}}
end
end
@productsProxy = Array.new
if @products != nil
@products.each do |p|
tempProduct = ProductProxy.new(p)
@productsProxy.push(tempProduct)
end
else
@productProxy = []
end
if @order == "new"
@productsProxy.sort!{ |a,b| b.productAvailableDateTs <=> a.productAvailableDateTs }
end
@productsProxy = @productsProxy.paginate(page: params[:page], per_page: 20)
respond_with("Search Results") do |format|
format.js
format.html
format.xml { render :xml => @productsProxy, :only => [:name, :permalink, :description, :mrp], :methods => [:designer, :taxons, :price] }
end
end
为什么即使在对整个@productsProxy
数组进行排序时,也只对已加载的产品进行排序。
由于
答案 0 :(得分:1)
确保下一页的请求包含params {order:'new'}。对于常规分页链接,请使用
will_paginate(@productProxy, :params => { :order => params[:order] || 'new' })