2010-11-20 5 views
0

User.lastを呼び出すと、アクティブレコードの並べ替えがidであるように見えます。アクティブレコードの最初のメソッドは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

+0

私は、最初のデフォルト注文ではARは何もせず、DBに注文を残すと仮定することができます。この場合、MySQLの注文は「id ASC」に対応します。最後に、このアプローチはうまくいかないので、ARは "id DESC"を使用します。しかし、それはちょうど推測です。 – Thilo

0

をそれは同じことを返します。結果は

​​

となります。 rderデータ。上記の注文方法のいずれかを追加する必要があります。

関連する問題