2014-03-02 60 views
1

我正在关注此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个记录并禁用分页按钮。

怎么回事?

回答

-1

按钮

你需要包括<%= will_paginate @products %>在您的视图(这可以让你每次刷新数据表的新分页内容:

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

记录

如果您看到10个结果是因为will_paginate,这意味着你在正确的轨道上。通过使用limitoffset创建一个“范围”的SQL查询,创业板的工作原理基本上,如果您已经正确实施了该gem,它只会从数据库中为您的视图撤回所需的数据,因此10结果

+0

感谢您的答复,但这只是让will_paginate的HTML分页的工作,但我试图让jQuery的数据表插件有分页。 –

+0

嗯,这是事情 - 'JQuery'数据表从Rails填充。这意味着如果您在SQL查询中使用'will_paginate',则只会将该页面的数据传递给您的数据表。为了让分页工作全部完成,你必须使用带有ajax的分页链接,返回新的表格数据(按照Railscast的说法)(http://railscasts.com/episodes/174-pagination-with -ajax)) –

+0

作者在他的示例中正在使用带有ajax源的数据表。在视图中放置分页将无法与搜索,排序等数据表的功能一起使用。 –

-2

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

+0

我提供的railscast使用带数据表的will_paginate。此外,我试图让代码是服务器端,而不是客户端,所以我需要有一些方法让rails代码自己分页。 –

+0

作者在他的示例中正在使用带有ajax源的数据表。不使用分页是让应用程序无法使用数百条记录进行扩展的好方法,尤其是对于依赖于附加查询的任何视图或数据。 –

2

我不是Rails开发者,但在我看来,这个问题是:

"iTotalRecords"  => @products.count, 

@products.count它的记录计数时,查询已经分页(始终为10或更少取决于页)。

试试这个值设置为的查询whitout任何分页的记录总数。

2

我认为问题是你应该使用total_entries而不是count

所以改变这样的:

"iTotalDisplayRecords"=> @products.count 

这样:

"iTotalDisplayRecords"=> @products.total_entries