当前代码以随机顺序显示结果,但我想首先显示美国列表,以便印度,英国和中国。
@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'
答案 0 :(得分:2)
您可以使用此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)
答案 1 :(得分:0)
您可以通过在订购时添加简单的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而异,您应该检查是否需要调整某些内容。希望它有所帮助。