为什么Rails ActiveRecord最后一个方法按id排序,而第一个不是?

时间:2012-05-03 06:40:09

标签: ruby-on-rails-3 sorting activerecord

根据this,ActiveRecord first生成SQL:

SELECT * FROM clients LIMIT 1

而ActiveRecord last生成SQL:

SELECT * FROM clients ORDER BY clients.id DESC LIMIT 1

根据我的观点,first上的行为不正确,而last上的行为则不正确。如果未指定排序,则简单SELECT将以任意或不可预测的顺序返回。因此,first无法保证始终返回相同的记录(如果不是最小ID的记录)。

有人有线索,为什么Rails ActiveRecord会这样工作?

提前致谢 Panayotis

2 个答案:

答案 0 :(得分:1)

由于我在这篇文章中没有得到任何答案,我试图在其他论坛上找到其他人的答案。我相信ActiveRecord(或mysql gem)有一个bug。里克詹姆斯说,如果我们想获得最低身份证,我们应该使用有限制的命令。 Here is his answer

http://forums.mysql.com/read.php?22,530328,530514#msg-530514

答案 1 :(得分:0)

我认为这不是法律上的,而是事实上的规则。大多数DB按照创建的顺序返回表的内容(因此按照id的顺序),如果没有指定排序。它只是有效。