[英]Kaminari/Ransack - Sort and Pagination issue
我正在使用Ransack,Kaminari和Postgres在我的Rails控制器中執行查詢/分頁,並且我有以下代碼:
ransack = current_user.condition? ? @company.contacts.ransack(params[:q]) :
current_user.contacts.ransack(params[:q])
ransack.sorts = 'id desc' if ransack.sorts.empty?
contacts = ransack.result.includes(:table1, :table2)
contacts = contacts.page(params[:page]).per(params[:per])
render json: contacts,
meta: pagination(contacts, total_count: true)
分頁方法定義如下:
def pagination(kaminari, total_count: false)
return unless kaminari.respond_to?(:current_page)
pagination = {
current_page: kaminari.current_page,
next_page: kaminari.next_page,
prev_page: kaminari.prev_page
}
pagination[:total_count] = kaminari.total_count if total_count
pagination
end
使用此代碼,一切都會按預期進行。 但是,如果我將排序行更改為:
ransack.sorts = 'created_at desc' if ransack.sorts.empty?
然后,我開始在結果中接收重復和不需要的條目。 誰能告訴我為什么會這樣嗎?
您的結果中includes
一些includes
項,並且這些表中的每一個大概都將具有created_at
字段,因此您的排序可能會模棱兩可。
值得在控制台中查看運行此查詢時生成了什么SQL,但是您可能會發現將“ sorts”行更改為:
ransack.sorts = 'contacts.created_at desc' if ransack.sorts.empty?
(或任何適合您的表名)
...有助於消除排序的歧義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.