在Rails中,我有以下Active Record Collection:
@products = Product.all
我需要遍历此集合并从中删除一些对象而不从数据库中删除它们。因此,使用
@products.each do |product|
if CONDITION
product.delete
end
end
无效,因为这也会从数据库中删除产品。有没有办法从这个集合中删除特定的产品而不从数据库中删除它们?
答案 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
。