根据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
答案 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的顺序),如果没有指定排序。它只是有效。