Как исключить массив идентификаторов из запроса в 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 для выполнения такого запроса.
Документация об этом, идет здесь