我正在关注这个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条记录并且禁用了分页按钮。
出了什么问题?
答案 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使用limit
和offset
来创建SQL查询的“范围”
基本上,如果你已经正确实现了gem,它只会从你的视图中回收数据库中所需的数据,因此10个结果
答案 3 :(得分:-2)
你这样做是错误的。当您在will_paginate
上使用datatables
时,首先使用same page
。你看到没有分页因为,分页会将记录的数量限制为10.因此,对于数据表识别和分页你的表,你必须打印页面上的所有记录,数据表将发现表中有超过10行和相应地对表格进行分页。