Rails 请问怎么实现这样的条件排序

kikyous · 2014年12月04日 · 最后由 greatghoul 回复于 2014年12月04日 · 2039 次阅读

Post 有属性 k

要实现的排序是这样的:

k 不为空的按created_at倒序取 5 条记录:

Post.where.not(k: nil).order('created_at DESC').first(5)

然后剩下的记录按created_at倒序排列:

Post.order('created_at DESC')

但是怎么把他们结合起来进行分页呢?

请大家提提建议,给点思路。 😄

Model

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

Controller

Post.k_is_not_nil.recent.paginate(params[:page])

有两个 Gem 提供分页支持 kaminariwill_paginate

#1 楼 @alixiaomiao 能给个关键字吗?

#2 楼 @kikyous k 不为空用 ne(k: nil), 分页用 skip()

#1 楼 @alixiaomiao 大概看懂了,可是我觉得你给出的代码没有解决问题的关键,ne(k: nil) 的只取 5 条

#4 楼 @kikyous 我没写是因为我看你写了,我总不能全部逻辑都写吧。你的标题是条件排序,你的问题是分页,所以我写了这两点,你也没说 5 条是关键问题啊。

k 不为空的按 created_at 倒序取 5 条记录:

这应该只有第一页才有吧,所以只对剩下的单独进来分页就好了嘛。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号