2010-11-20 48 views
0

当调用User.last它看起来像活动记录排序idActive Record的第一种方法是按ID排序吗?

User Load (1.4ms) SELECT * FROM用户ORDER BY users.id DESC LIMIT 1

但调用User.first当它不使用命令子句。

User Load (1.9ms) SELECT * FROM用户LIMIT 1

因此,这是保证返回具有最低ID的用户?这似乎在实践中,但我不确定MySQL是否能保证这一点。

或者您是否必须这样做:User.first(:order => 'id')这会强制执行订单条款。

编辑:我想这真的是MySQL的问题。是SELECT * FROM用户LIMIT 1保证返回用户最低的ID?

回答

1

不知道是什么的ActiveRecord的默认操作,但你可以使用ActiveRecord的default_scope方法迫使模型中的默认顺序:

default_scope :order => "id ASC" 

或Rails的3

default_scope order("id ASC") 
+0

但通过ID确实AR强制排序,默认情况下mysql通过新鲜命令记录...或者我错了吗? – mpapis 2010-11-21 00:44:01

+0

我只能假设,对于第一个默认订单,AR不做任何事情,并将订单留给数据库,这将在MySQL订单中通过插入订单进行,这恰好对应于“id ASC”。最后,这种方法不起作用,所以AR使用“id DESC”。但这只是一个猜测。 – Thilo 2010-11-21 11:01:21

0

它将返回相同的结果为

​​

所以它到你的数据库如何o订单数据。即您必须添加上述订单方法中的任何一种。