我试图了解 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。