我将用户消息存储在db中。我需要查询最后10条记录,并以相反的顺序返回它们,因此假设用户创建了message_1,message_2和message_3。我希望结果的排序方式如下:[message_1, message_2, message_3]
,即最后一条消息是结果中的最后一条。但是这个范围:
scope :last_page, -> () { order('created_at DESC').limit(10)
返回[message_3, message_2, message_1]
之类的记录,即最后一条消息位于顶部。
我尝试的是:
scope :last_page, -> () { order('created_at DESC').limit(10).sort_by(&:created_at) }
产生所需的结果,但返回Array而不是ActiveRecord::Relation
。我喜欢范围来返回关系而不是数组。我怎样才能做到这一点?
答案 0 :(得分:1)
order('created_at DESC')
会将最新(或最后)作为第一个或只是降序。您需要将order('created_at ASC')
与last
合并。以下代码应该有效。
scope :last_page, -> () { order('created_at ASC').last(10)
或
scope :last_page, -> () { order('created_at').last(10)