簡體   English   中英

Kaminari / Ransack-排序和分頁問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM