Sql 按与作用域相反的顺序查询N条最后记录

Sql 按与作用域相反的顺序查询N条最后记录,sql,ruby-on-rails,Sql,Ruby On Rails,我将用户消息存储在数据库中。我需要查询最后10条记录,并以相反的顺序返回它们,所以假设用户创建了消息_1、消息_2和消息_3。我希望结果的顺序如下:[消息1、消息2、消息3],即最后一条消息是结果中的最后一条。但这一范围: scope :last_page, -> () { order('created_at DESC').limit(10) 返回类似于[消息3、消息2、消息1]的记录,即最后一条消息位于顶部 我试过的是: scope :last_page, -> () {

我将用户消息存储在数据库中。我需要查询最后10条记录,并以相反的顺序返回它们,所以假设用户创建了消息_1、消息_2和消息_3。我希望结果的顺序如下:
[消息1、消息2、消息3]
,即最后一条消息是结果中的最后一条。但这一范围:

scope :last_page, -> ()  { order('created_at DESC').limit(10)
返回类似于
[消息3、消息2、消息1]
的记录,即最后一条消息位于顶部

我试过的是:

  scope :last_page, -> ()  { order('created_at DESC').limit(10).sort_by(&:created_at) }
它生成所需的结果,但返回数组,而不是
ActiveRecord::Relation
。我希望作用域返回关系而不是数组。我怎样才能做到这一点

order('created_at DESC')
将为您提供最新的(或最后一个)作为第一个或简单的降序。您需要将
order('created_at ASC')
last
相结合。下面的代码应该可以工作

scope :last_page, -> ()  { order('created_at ASC').last(10)


您不能在范围内使用
排序依据
。范围是链,并为您构建SQL
sort_by
是一种Ruby可枚举方法,可用于处理内存中的数据。你需要完全正确地应用其他一些技巧。我会问你为什么要分类?
order(“…”)
不会处理这个问题吗?它会返回结果数组还是ActiveRecord::Relation?我想知道你是否能从一个范围得到这个关系。不确定。@jaydel所有作用域方法都将返回一个
ActiveRecord::Relation
object.cool,谢谢。我的下一个问题是,last()是
ActiveRecord::Relation
上的方法还是
数组
/
可枚举的方法?@jaydel有一个ActiveRecord,还有一个方法可以在数组上使用。它仍然返回数组,而不是范围。
scope :last_page, -> ()  { order('created_at').last(10)