Ответ 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)
И он полностью объектно-ориентирован без строк: -)
Я хотел бы выполнить запрос 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)
Они терпят неудачу. Этот совет может быть на правильном пути, но мне не удалось его адаптировать. Любая помощь будет принята с благодарностью.
Это должно работать:
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 для выполнения такого запроса.
Документация по нему, здесь