分页数据表

时间:2014-03-02 21:07:16

标签: jquery ruby-on-rails datatable pagination

我正在关注这个railscast:http://railscasts.com/episodes/340-datatables

我正在尝试让我的数据表分别为每10个项目分页。我的代码如下所示:

def index
  @search = Product.search do |query|
    query.fulltext params[:sSearch]
    query.with(:store_id, @store.id)
    query.paginate(:page => page, :per_page => per_page)
  end
  @products = @search.results

  @headers = @products.map(&:data).flat_map(&:keys).uniq

  @product_data = @products.map{ |product| product[ :data ].values }

  respond_to do |format|
    format.html
    format.json do
      render :json=> {
        "sEcho"               => params[:sEcho].to_i,
        "iTotalRecords"       => @products.count,
        "iTotalDisplayRecords"=> @products.count,
        "aaData"              => @product_data.as_json
      }
    end
  end
end

private
  def page
    params[:iDisplayStart].to_i/per_page + 1
  end

  def per_page
    params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 10
  end

我安装了will_paginate gem,但数据表似乎没有认识到它应该是分页,它最多显示10条记录并且禁用了分页按钮。

出了什么问题?

4 个答案:

答案 0 :(得分:2)

我不是开发人员,但在我看来问题是:

"iTotalRecords"       => @products.count,

@products.count这是查询已经分页的记录计数(总是10或更少,具体取决于页面)。

尝试将此值设置为查询的记录总数 whitout any pagination

答案 1 :(得分:2)

我认为问题是你应该使用total_entries代替count

所以改变这个:

"iTotalDisplayRecords"=> @products.count

到此:

"iTotalDisplayRecords"=> @products.total_entries

答案 2 :(得分:-1)

<强>按钮

您需要在视图中加入<%= will_paginate @products %>(这样您每次都可以使用新的分页内容刷新数据表:

#app/views/products/datatable.html.erb
<<datatable>>
<%= will_paginate @posts %>

<强>记录

如果你看到10个结果是will_paginate,那就意味着你走在了正确的轨道上。 gem使用limitoffset来创建SQL查询的“范围”

基本上,如果你已经正确实现了gem,它只会从你的视图中回收数据库中所需的数据,因此10个结果

答案 3 :(得分:-2)

你这样做是错误的。当您在will_paginate上使用datatables时,首先使用same page。你看到没有分页因为,分页会将记录的数量限制为10.因此,对于数据表识别和分页你的表,你必须打印页面上的所有记录,数据表将发现表中有超过10行和相应地对表格进行分页。