Post 有属性 k
Post
k
要实现的排序是这样的:
k 不为空的按created_at倒序取 5 条记录:
created_at
Post.where.not(k: nil).order('created_at DESC').first(5)
然后剩下的记录按created_at倒序排列:
Post.order('created_at DESC')
但是怎么把他们结合起来进行分页呢?
请大家提提建议,给点思路。
COUNT_PER_PAGE = 10 # mongodb scope :k_is_not_nil, -> { ne(k: nil) } scope :recent, -> { order(created_at: :desc) } scope :paginate, ->(page = 1) { skip(COUNT_PER_PAGE * (page - 1) }
Post.k_is_not_nil.recent.paginate(params[:page])
有两个 Gem 提供分页支持 kaminari 和 will_paginate
kaminari
will_paginate
#1 楼 @alixiaomiao 能给个关键字吗?
#2 楼 @kikyous k 不为空用 ne(k: nil), 分页用 skip()
ne(k: nil)
skip()
#1 楼 @alixiaomiao 大概看懂了,可是我觉得你给出的代码没有解决问题的关键,ne(k: nil) 的只取 5 条
#4 楼 @kikyous 我没写是因为我看你写了,我总不能全部逻辑都写吧。你的标题是条件排序,你的问题是分页,所以我写了这两点,你也没说 5 条是关键问题啊。
k 不为空的按 created_at 倒序取 5 条记录:
这应该只有第一页才有吧,所以只对剩下的单独进来分页就好了嘛。