С фрагментом кода в одном из ответов выше, "@ids" не очищается.Это хорошо, если ваш код «знает», что «@ids» содержит только допустимые целочисленные идентификаторы, но очень опасно, если какой-либо идентификатор поступил из пользовательского ввода или URL-адреса.См .:
... для возможного решения.Это защищенный метод, поэтому мы должны вызвать через 'send', чтобы продемонстрировать его использование на консоли:
>> ActiveRecord::Base.send(:sanitize_sql_for_conditions, { :id => [1,6] }, :people)
=> "people.\"id\" IN (1,6)"
... т.е. вставить приведенный выше результат после ключевого слова SQL WHERE.Как сказано в предыдущем ответе, если у вас нет действительно сложного случая, который не может быть построен с использованием стандартных вызовов Rails (что действительно имеет место для Coderama, но может не подходить для будущих читателей), вы всегда должны избегать написания SQL сhand.
Имея это в виду, альтернативным способом создания сложных запросов является плагин "ez_where", на который стоит обратить внимание, если кто-то читает думает о том, чтобы прибегнуть к SQL:*http://github.com/ezmobius/ez-where