我在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_at
或updated_at
(不能保证id
的时间顺序)。如果要始终对所有查询进行排序,则可以使用default_scope
,但通常应避免使用它。
关于ruby-on-rails-3 - ActiveRecord查找全部不按ID排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4986496/