如何分页

时间:2017-04-14 18:22:13

标签: 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'

2 个答案:

答案 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而异,您应该检查是否需要调整某些内容。希望它有所帮助。