ruby-on-rails-3 - ActiveRecord查找全部不按ID排序吗?

标签 ruby-on-rails-3 activerecord sql-order-by

我在Heroku部署中遇到了一个奇怪的问题,我似乎无法在本地复制它。基本上,当我在特定模型上找到所有内容而不是按ID排序时,似乎根本没有顺序返回它们。

通常,记录如下所示:

>> Model.all

=> [<model id: 2>,<model id: 1>,<model id: 3>,<model id: 4>,<model id: 5>]


... 等等。

如果我显式调用Model.order("id ASC"),它将按预期返回模型。

是什么赋予了?为什么会发现所有未按降序ID返回的对象?

最佳答案

默认情况下,不能保证按ID订购。由数据库决定无序查询的顺序(通常是未指定的)。如果要对结果进行排序,则需要使用order指定明确的顺序,如下所示:

Model.order(id: :asc)


还要注意,仅当需要确定性顺序时,才应按id进行排序。如果要按时间排序,请使用created_atupdated_at(不能保证id的时间顺序)。如果要始终对所有查询进行排序,则可以使用default_scope,但通常应避免使用它。

关于ruby-on-rails-3 - ActiveRecord查找全部不按ID排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4986496/

相关文章:

java - 如何使用 @OrderBy 对 Hibernate 中的复合键之一进行排序

ruby-on-rails - RoR rspec 测试失败,错误为 <top (required)> 中的“block (2 levels)”

ruby-on-rails - 如何将 Rails View 助手提取到 gem 中?

MySQL 'Order By' - 正确排序字母数字

ruby-on-rails - 如何在 activerecord 中实现动态验证

mysql - 如何从 MYSQL 获取随机行以及如何将其写入事件记录中?

mysql - 如何对mysql中多列的行进行排序

ruby-on-rails - Rails3 : warning: toplevel constant ApplicationController referenced by

ruby-on-rails - 获取 Rails 3 关联的 SQL

ruby-on-rails - 如何为类中的特定方法连接到不同的数据库?