根据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
发布于 2012-05-04 15:11:22
因为我在这篇文章中没有得到任何答案,所以我试着在其他论坛上从其他人那里寻找答案。我认为ActiveRecord (或mysql gem)都有一个bug。Rick James说,如果我们想要获得最小id,我们应该使用order by with limit。Here is his answer
http://forums.mysql.com/read.php?22,530328,530514#msg-530514
发布于 2012-05-03 16:49:45
我认为这不是法律上的规则,而是事实上的规则。在未指定排序的情况下,大多数DB按创建顺序(按其id的顺序)返回表的内容。它就是这样的。
https://stackoverflow.com/questions/10426352
复制相似问题