从Active Record Array中删除Object

时间:2014-12-16 18:17:02

标签: ruby-on-rails

在Rails中,我有以下Active Record Collection:

@products = Product.all

我需要遍历此集合并从中删除一些对象而不从数据库中删除它们。因此,使用

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

无效,因为这也会从数据库中删除产品。有没有办法从这个集合中删除特定的产品而不从数据库中删除它们?

2 个答案:

答案 0 :(得分:11)

第一个问题,如果你不想要所有记录,那么为什么甚至从数据库中返回它们呢?为什么不使用where子句来过滤结果:

@products = Product.where(<CONDITIONS>)

其次,如果您坚持要返回所有结果然后过滤,请使用.reject块:

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

答案 1 :(得分:1)

由于Active Record Collections是数组,因此您可以使用reject!

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

如果your_code评估为true,则会从集合中删除product