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