Ruby on rails 如何在分页中排序

Ruby on rails 如何在分页中排序,ruby-on-rails,will-paginate,Ruby On Rails,Will Paginate,当前代码以随机顺序显示结果,但我想先显示美国列表,然后显示印度、英国和中国 @obj = User.where(:area => ["USA","India","UK","China"]).paginate(:page => params[:page], :per_page => 1) 我正在使用Paginate gem gem 'will_paginate', '~> 3.1.0' gem 'will_paginate-bootstrap' 您可以使用此sql技巧按

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

@obj = User.where(:area => ["USA","India","UK","China"]).paginate(:page => params[:page], :per_page => 1)
我正在使用Paginate 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)

您可以通过向订单中添加简单的案例逻辑来实现所需的功能,请尝试以下操作:

@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)

给定案例语法可能会因您的RDBMS而异,您应该检查是否需要调整某些内容。希望有帮助。

对于善意否决我的答案的人,我想知道为什么没有用。Tq@Iceman,当我将(地区:%w(美国-印度-英国,中国)更改为(:地区=>['USA','India','UK','China')时,你的工作很好,Tq非常
%w()
也有效,创建字符串数组只是语法上的糖分