2014-03-02 58 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