Ой, это неудачный крайний случай.
Это специально не задокументировано, потому что это просто еще один шаг в общем процессе привязки всех параметров запроса.
Лучшей рекомендацией будет «Не делай этого»: если эти идентификаторы поступают из базы данных, используйте подзапрос вместо того, чтобы направлять их через прикладной уровень. (Я видел много приложений, которые вынуждают списки идентификаторов, когда эквивалент подзапроса меньше кода и более эффективен с БД.) Если они приходят из других мест, и у вас нет другого выбора, я бы попытался расположить запрос в способ, который позволил разбить их на наборы по 50к или около того.
Нет способа запросить старое поведение ... если вы этого хотите, вам, вероятно, придется написать собственный конструктор фрагментов запроса:
# Obviously be very careful when doing this; we're deliberately avoiding
# the feature that normally protects against SQL injection
foos.where("id IN (#{[1, 2, 3].map(&:to_i).join(",")})")
Вам не нужно иметь , чтобы идти так грубо - есть немного безопаснее
foos.where(Foo.sanitize_sql(["id IN (?)", [1, 2, 3]]))
... но, хотя это будет работать и сейчас, вполне возможно, что метод может начать использовать привязки в будущем выпуске (6.0 или новее).