0

Rails ActiveRecord の動作を で理解しようとしていlimitます。

Car属性が 1 つしかないモデルがあるとしますname

コンソール ( rails console) で、次のように入力します。

Car.limit(0).where(name: 'foo')

私は得る

SELECT "cars".* FROM "cars" WHERE "cars"."name" = 'foo' LIMIT 0

これは正しいですが、次のとおりです。

Car.limit(0).find_by_id(1)

与える

SELECT "cars".* FROM "cars" WHERE "cars"."id" = 1 LIMIT 1

limitオプションが無視されるのはなぜですか?

ご了承ください

Car.where(name:'foo').find_by_id(1)

与える

SELECT "cars".* FROM "cars" WHERE "cars"."name" = 'foo' AND "cars"."id" = 1 LIMIT 1

だからfind_by_id(またはfind)無視しlimitますが、受け入れwhereますか?それをどう説明しますか?

サイドノート

これらのクエリが意味をなさないことはわかっています。を実行するプロジェクトにエッジケースがありCar.limit(0).find_by_id(1)、期待される結果は nil オブジェクトを取得することでした。なぜfind_by_idまたはfind無視するのかを理解しようとしていlimitます。

4

1 に答える 1

0

findおよびfind_by_は、単一のインスタンスを取得するために使用されるメソッドです。オブジェクトが見つからない場合、結果は 1 つのオブジェクトまたは nil になります。

このメソッドは 1 つのオブジェクトのみを返すことになっているため、指定した制限に関係なく、制限を 1 に設定します。

制限を指定する場合は、例に従って where を使用します。

于 2013-05-14T08:31:44.177 に答える