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
ます。