如何在分页中排序

How to sort in pagination

当前代码以随机顺序显示结果,但我想先显示美国列表,然后是印度、英国和中国。

@obj = User.where(:area => ["USA","India","UK","China"]).paginate(:page => params[:page], :per_page => 1)

我正在使用分页 gem。

gem 'will_paginate', '~> 3.1.0'
gem 'will_paginate-bootstrap'

您可以使用这个 sql 技巧按预定义列表进行排序。

@obj = User.where(area: %w(USA India UK China))
  .order("area = 'USA' desc")
  .order("area = 'India' desc")
  .order("area = 'UK' desc")
  .order("area = 'China' desc")
  .paginate(page: params[:page], per_page: 1)

您可以通过在订单中添加一个简单的 CASE 逻辑来实现您的需求,试试这个:

@collection = User
  .where(area: %w(USA India UK China))
  .order("CASE area WHEN 'USA' THEN 'a' WHEN 'India' THEN 'b' WHEN 'UK' THEN 'c' ELSE 'd' END")
  .paginate(page: params[:page], per_page: 1)

鉴于 CASE 语法可能会根据您的 RDBMS 而有所不同,您应该检查是否需要调整某些内容。希望对你有帮助。