2014-09-22 4 views
1

У меня есть набор идентификаторов записей ["303", "430", "4321", "5102"]. Я хочу, чтобы получить все записи, которые соответствуют эти идентификаторы, используя SQL:Получить все записи Rails из массива ID

acceptable_ids = ["303", "430", "4321", "5102"] 
@users = User.where("is_awesome = true AND id IN acceptable_ids) 

дает эту ошибку:

ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: syntax error at or near "[" 

Что такое правильный способ, чтобы написать мой запрос, чтобы получить все пользователи с идентификаторами, которые соответствуют acceptable_ids ?

Примечание:

Я знаю User.find(acceptable_ids), но не могу использовать это, так как я построение запроса SQL с выбором, где и присоединиться пунктами.

+0

возможно дубликат [Rails консоли найти пользователей с помощью массива идентификаторов] (http://stackoverflow.com/questions/21435768/rails-console-find-users-by-array-of-ids) –

+0

@ BradWerth, пожалуйста, прочитайте примечание в нижней части моего вопроса, спасибо :) –

+0

Я предполагаю, что это не ваш фактический код, потому что в нем есть синтаксические ошибки ... –

ответ

-3

Вы могли бы это сделать.

@users = User.where("is_awesome = true AND id IN (#{acceptable_ids.join(', ')})") 

Я уверен, что я видел более простой способ, но не могу вспомнить его в данный момент ... но выше должно работать.

EDIT

Однако, вы можете видеть из громогласных комментариев, что это не популярный ответ, так что вы должны смотреть на некоторые из альтернатив, связанных и перечисленных, например

# Will raise exception if any value not found 
User.find([1,3,5]) 

# Will not raise an exception 
User.find_all_by_id([1,3,5]) 
+0

Аргументное преобразование, безусловно, должно быть передано ActiveRecord. В противном случае это плохая практика, поскольку делает инъекции SQL более вероятными, особенно с новичками. –

+0

Я думаю, что у вас есть дополнительная скобка там? –

+0

Спасибо @DonnyP ... Я думаю, что мне не хватало закрывающей круглой скобки, просто добавила ее. – SteveTurczyn

8
User.where(is_awesome: true, id: acceptable_ids)