2012-11-13 32 views

回答

2

Java JPA/Hibernate Finding out the page containing a given record using JPA (Hibernate)還有一個類似的問題和答案,它顯示了索引視圖中獲取記錄偏移所需的sql。像

SELECT COUNT(*) 
FROM Model r 
WHERE r.column < ? 
ORDER BY r.id 

頁碼的東西會被抵消/ records_per_page + 1

接下來的問題是如何從雷的records_per_page? Kaminari允許您通過配置爲每個頁面設置記錄數,並通過Model.paginates_per設置特定模型的記錄數。它提供了Model.default_per_page方法,以產生模型的每頁記錄數。

決定頁面的最佳位置將出現在顯示索引的控制器方法中。該方法已經拿起頁面參數,如果存在,顯示正確的頁面。另一種方法是在重定向之前計算頁面併發送頁面參數。讓我們試試前者。

保存編輯後,我們重定向到索引,並帶有一個標識我們想要包含在索引頁redirect with params中的記錄的參數。該索引按Model.column進行排序。

redirect_to model_index_url(:for_column => @model_record.column), 
    :notice => 'Record saved' 

然後在控制器的索引方法中,我們讓頁面PARAM支配,或者如果存在的話從所述for_column PARAM計算頁面。

page = 1 
if (params[:page]) 
    page = params[:page] 
elsif (params[:for_column]) 
    offset = Model.select('count(*) as count').where('? < column', 
    params[:for_column]).order(id).first 
    page = offset.count/Model.default_per_page + 1 
end 
@records = Model.all.order('column desc').page(page) 

當然,Model和Model.column代表您的應用程序的模型和列名稱。

+0

在SQlite3中,這種方法不起作用(我的模型被連接並按不同的順序排列)。我必須遵循這個解決方案:http://stackoverflow.com/a/26547854/1252245 – sequielo

相關問題