我在Rails www.example.com中得到了一些不一致的行为6.0.2.2:
[49] pry(main)> Client.where(id: 1..3).limit(10).ids
(8.0ms) SELECT "clients"."id" FROM "clients" WHERE "clients"."id" BETWEEN $1 AND $2 LIMIT $3 [["id", 1], ["id", 3], ["LIMIT", 10]]
=> [1, 2, 3]
[50] pry(main)> Client.where(id: 1..).limit(10).ids
(0.5ms) SELECT "clients"."id" FROM "clients" WHERE "clients"."id" >= $1 LIMIT $2 [["id", 1], ["LIMIT", 10]]
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[51] pry(main)> Client.where(id: ..3).limit(10).ids
(0.4ms) SELECT "clients"."id" FROM "clients" WHERE "clients"."id" BETWEEN $1 AND $2 LIMIT $3 [["id", nil], ["id", 3], ["LIMIT", 10]]
=> []
看起来如果你在一个范围内使用一个nil
最大值,它会像预期的那样在where
子句中使用>=
而不是between
。但是如果使用nil
最小值,而不是使用<=
,它仍然使用between
,这不会返回任何结果。这是ActiveRecord中的一个问题吗?有推荐的解决方法吗?
1条答案
按热度按时间x759pob21#
这看起来像是ActiveRecord中的一个问题,你可以通过使用Arel或Float::INFINITY来解决它。
问题is solved in Rails 6.1将被向后移植到6.0。