Подтвердить что ты не робот

Как исключить массив идентификаторов из запроса в Rails (используя ActiveRecord)?

Я хотел бы выполнить запрос ActiveRecord, который возвращает все записи, кроме тех записей, которые имеют определенные идентификаторы. Иды, которые я хотел бы исключить, хранятся в массиве. Итак:

ids_to_exclude = [1,2,3]
array_without_excluded_ids = Item. ???

Я не уверен, как завершить вторую строку.

Фон: что я уже пробовал:

Я не уверен, что фон необходим, но я уже пробовал различные комбинации .find и .where. Например:

array_without_excluded_ids = Item.find(:all, :conditions => { "id not IN (?)", ids_to_exclude })
array_without_excluded_ids = Item.where( "items.id not IN ?", ids_to_exclude)

Они терпят неудачу. Этот совет может быть на правильном пути, но мне не удалось его адаптировать. Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Это должно работать:

ids_to_exclude = [1,2,3]
items_table = Arel::Table.new(:items)

array_without_excluded_ids = Item.where(items_table[:id].not_in ids_to_exclude)

И он полностью объектно-ориентирован без строк: -)

Ответ 2

Решение Rails 4:

ids_to_exclude = [1,2,3]
array_without_excluded_ids = Item.where.not(id: ids_to_exclude)

Ответ 3

Вы также можете использовать Squeel gem для выполнения такого запроса. Документация по нему, здесь