В Rails 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, и есть ли рекомендуемый способ обойти это?