2014-12-16 8 views
7

В Rails У меня есть следующий Active Record Collection:Удаление объектов из Active Record массива

@products = Product.all 

мне нужно перебрать эту коллекцию и удалить некоторые объекты из него, не удаляя их из базы данных. Поэтому использование

@products.each do |product| 
    if CONDITION 
     product.delete 
    end 
end 

Не работает, так как это также удалит продукт из базы данных. Есть ли способ удалить определенные продукты из этой коллекции, не удаляя их из базы данных?

+2

Не стесняйтесь игнорировать это, но это против любых таких ORM. ActiveRecotrd _is предполагается_ представлять объекты в базе данных. Я рекомендую вам переосмыслить весь ваш подход - неужели у вас есть веская причина для такого взлома? –

+0

Наверное, нет, но мне нужно также прокрутить другой массив и сравнить объекты в обоих массивах друг с другом. Я не уверен, как я собирался приспособить эту логику к заявлению вроде @products = Product.where () – Arw50452

ответ

10

Первый вопрос, если вы не хотите, чтобы все записи, то почему даже вернуть их из БД? Почему бы не использовать ИНЕКЕ для фильтрации результатов:

@products = Product.where(<CONDITIONS>)

Во-вторых, если вы настаиваете на возвращении всех результатов, то фильтрация, используйте .reject блок:

@products = Product.all.reject { |p| <CONDITION> }

+0

Спасибо! Мне нужно вложить петлю через другой массив и сравнить каждый объект в этом массиве с каждым объектом в этом массиве как часть условия. Я не был уверен, как это сделать в @products = Product.where () – Arw50452

+0

@ Arw50452 - это массив сравнения и массив значений (например, '[1,2,3,4]') или массив хэшей (т.е. '[{значение: 1}, {значение: 2}, {значение: 3}]')? – tagCincy

+0

Сравнительный массив - это еще один массив активной записи – Arw50452

1

Поскольку Активность Коллекции записей являются массивы, вы можете использовать reject!:

@products.reject! do |product| 
    // your_code 
end 

Если your_code оценивается в true, то product удален из коллекции.

+1

Я получаю 'undefined method 'reject'' при попытке« отклонить »в своей коллекции Active Record. Также попытался «отклонить!» С тем же результатом. – ChaosFreak

+0

@ChaosFreak вы можете показать нам полное сообщение об ошибке? –

Смежные вопросы