0

我试图了解 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_idfind忽略limit

4

1 回答 1

0

find并且find_by_是用于检索单个实例的方法。结果要么是一个对象,要么是 nil,如果没有要找到的对象。

因为该方法应该只返回一个对象,所以无论您指定什么限制,它都会将限制设置为 1。

如果要指定限制,请根据您的示例使用 where 。

于 2013-05-14T08:31:44.177 回答