如何在分页中排序
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 而有所不同,您应该检查是否需要调整某些内容。希望对你有帮助。
当前代码以随机顺序显示结果,但我想先显示美国列表,然后是印度、英国和中国。
@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 而有所不同,您应该检查是否需要调整某些内容。希望对你有帮助。