У нас была эта же проблема с проектом Rails 2.3.12. не с searchlogic 2.4.7 мы можем сделать:
User.id_equals([1,2,3])
После обновления искать логику 2.5.8 (Deprecation сообщение в старом были захламление из огурца и вывода спецификации), этот синтаксис больше не работал. Он бросил эту ошибку так же, как один из приведенных выше:
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 commit changing handling of arrays
Результат этих изменений и обсуждение было требовать _any для времен, когда вы хотите матч против любого значения в массив, и в противном случае просто передать массив в выражение equals напрямую, не меняя SQL на «IN», как это необходимо для нескольких значений.
Возврат к 2.4.7 устраняет ошибку. Изменение всех вызовов более явного _any или _in - это то, что мы закончили, чтобы избежать ошибок устаревания. Надеюсь, что это поможет и добавляет к очень полезным ответам выше.
К сожалению, это не сработает. Я получаю эту ошибку «неправильное число переменных привязки (2 для 1) in: employees.unit_id IN (?)» – eabhvee
Не могли бы вы дать больше намеков на сообщение об ошибке? например, когда генерируется сообщение? Я не могу понять, почему было 2 переменные ...... – PeterWong
В моем режиме просмотра я выбрал 2 единицы и передал их как массив, если я выберу 5, он скажет 5 для 1. Мой параметр hash таков: -> unit_id_equals "=> [" 332 "," 333 "] – eabhvee