Как исключить массив идентификаторов из запроса в Rails (используя ActiveRecord)? - PullRequest
21 голосов
/ 03 января 2011

Я хотел бы выполнить запрос 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)

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

Ответы [ 3 ]

32 голосов
/ 14 ноября 2013

Решение Rails 4:

ids_to_exclude = [1,2,3]
array_without_excluded_ids = Item.where.not(id: ids_to_exclude)
32 голосов
/ 03 января 2011

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

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 голосов
/ 19 февраля 2013

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

...