4

thisに従って、ActiveRecordfirstは SQL を生成します。

SELECT * FROM clients LIMIT 1

一方、ActiveRecordlastは SQL を生成します。

SELECT * FROM clients ORDER BY clients.id DESC LIMIT 1

first私の意見によると、上の動作は正しくありませんが、上の場合は正しいlastです。順序を指定しない場合、単純な SELECT は任意の順序または予測できない順序で返されます。したがって、first常に同じレコードを返すことは保証されません (最小 ID のレコードでない場合)。

Rails ActiveRecord がそのように機能するのはなぜですか?

よろしくお願いします

4

2 に答える 2

1

この投稿で回答が得られなかったので、他のフォーラムで他の人から回答を見つけようとしました。ActiveRecord (または mysql gem) にバグがあると思います。Rick James は、最小の ID を取得したい場合は、order by with limit を使用する必要があると述べています。彼の答えは次のとおりです。

http://forums.mysql.com/read.php?22,530328,530514#msg-530514

于 2012-05-04T07:11:21.773 に答える
0

デジュールではなく、事実上のルールだと思います。ほとんどの DB は、順序が指定されていない場合、テーブルの内容を作成順に (ID の順に) 返します。それだけで機能します。

于 2012-05-03T08:49:44.523 に答える