RoR:在无限页面上对分页产品进行排序

时间:2014-06-07 09:13:47

标签: ruby-on-rails ruby-on-rails-3 pagination

我正在使用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数组进行排序时,也只对已加载的产品进行排序。

由于

1 个答案:

答案 0 :(得分:1)

确保下一页的请求包含params {order:'new'}。对于常规分页链接,请使用

will_paginate(@productProxy, :params => { :order => params[:order] || 'new' })