【问题标题】:Kaminari/Ransack - Sort and Pagination issueKaminari/Ransack - 排序和分页问题
【发布时间】:2018-03-14 21:03:21
【问题描述】:

我正在使用 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?

然后我开始在我的结果中收到重复的和不需要的条目。谁能告诉我为什么会这样?

【问题讨论】:

  • 您对“sorts”行的更改与上面的示例相同。你有错字吗?
  • 对不起,我没注意到。我用正确的行更新了问题

标签: ruby-on-rails ruby postgresql ransack kaminari


【解决方案1】:

您的结果中有一些includes,并且这些表中的每一个都可能有一个created_at 字段,因此您的排序可能不明确。

值得在控制台中查看运行此查询时生成的 SQL,但您可能会发现将“排序”行更改为:

ransack.sorts = 'contacts.created_at desc' if ransack.sorts.empty?(或任何适合您的表名)

...有助于消除排序的歧义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2010-11-05
    • 2023-04-06
    • 2011-08-02
    • 2014-06-26
    • 2011-07-24
    相关资源
    最近更新 更多