У нас была такая же проблема с проектом Rails 2.3.12.С searchlogic 2.4.7 мы могли бы сделать:
User.id_equals([1,2,3])
После обновления до логики поиска 2.5.8 (сообщения об устаревании в старом загромождали вывод огурца и спецификации), этот синтаксис больше не работал.Он выдал эту ошибку, как показано выше:
ActiveRecord::StatementInvalid: Mysql::Error: Operand should contain 1 column(s): SELECT * FROM `users` WHERE (users.id = 1, 2, 3)
После попытки решения выше, мы обнаружили, что эти две синтаксические альтернативы работают:
User.id_in([1,2,3]) <-- as suggested above
User.id_equals_any([1,2,3])
Другими словами, без "_any "новая логика поиска выдает недопустимый mysql.Изучая, когда и почему это изменение могло произойти, я обнаружил следующее обсуждение:
Github, изменяющий обработку обработки массивов
Результат этого изменения и обсуждения былтребовать _any для случаев, когда требуется сопоставить любое значение в массиве, а в противном случае просто передать массив в оператор equals напрямую, не изменяя SQL на «IN», как это необходимо для нескольких значений.
Возвращение к 2.4.7 устраняет ошибку.Мы изменили все вызовы на более явные _any или _in, чтобы избежать ошибок устаревания.Надеюсь, что это помогает и добавляет очень полезные ответы выше.