我试图了解 Rails ActiveRecord 的行为limit
。
假设我有一个Car
只有一个属性的模型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
。