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

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

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

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

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

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

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 ответов


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

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)

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


Rails 4 решение:

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

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