2010-11-20 52 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訂單數據。即您必須添加上述訂單方法中的任何一種。

相關問題