And*_*rew 18 activerecord sql-order-by ruby-on-rails-3
我在Heroku部署上遇到了一个奇怪的问题,我似乎无法在本地复制.基本上当我在特定模型上找到所有内容而不是按ID排序时,它似乎根本无法返回它们.
通常记录如下:
>> Model.all
=> [<model id: 2>,<model id: 1>,<model id: 3>,<model id: 4>,<model id: 5>]
Run Code Online (Sandbox Code Playgroud)
... 等等.
如果我明确地调用Model.order("id ASC")它,则按预期返回模型.
是什么赋予了?为什么会发现所有不按降序ID顺序返回对象?
And*_*all 26
默认情况下不保证按ID排序,因为数据库是如何排序非有序查询的(通常是未指定的).您可以通过在模型顶部定义默认范围来始终对其进行排序,如下所示:
Model.order(id: :asc)
Run Code Online (Sandbox Code Playgroud)
然后调用order将等同于调用id.
在SQL中,表被视为记录集,而不是记录列表,并且不保证'select'查询以任何特定顺序返回记录,除非明确包含'order by'子句.您可能偶尔会看到结果以特定顺序返回,但这并不意味着您可以或应该假设它始终如此.
使用ActiveRecord,如果您愿意,可以通过指定默认范围来强制使用默认的"order by"子句.一般来说,这是一个坏主意,因为它会强制服务器做更多的工作来为你提供一个排序的结果集,即使你不需要它排序.此外,在'id'字段中排序通常是不合适的,因为'id'的点是不透明的记录标识符,没有任何目的或意义,除了对于表中的给定记录是唯一的.
| 归档时间: |
|
| 查看次数: |
8165 次 |
| 最近记录: |