我从Rails查找查询中获取结果集。我想迭代该结果集并依赖于某些条件从该结果集中删除记录,然后再将其传递以进行进一步处理。附加条件在数据库中保存的数据外部,因此我不能将它们包含在原始的“查找”查询中。
注意我不想从数据库中删除任何记录,只是从结果集中删除它们。
请有人给我代码来做到这一点。
答案 0 :(得分:30)
答案 1 :(得分:6)
set = MyObject.find(...)
set = set.reject{|s| ... }
或
set = set.select{|s| ... }
答案 2 :(得分:1)
您也可以使用delete_at
:
irb(main):005:0> c = Category.all
Category Load (0.3ms) SELECT "categories".* FROM "categories"
=> [#<Category id: 1, name: "15 anos", description: nil, created_at: "2011-09-22 04:52:53", updated_at: "2011-09-22 04:52:53">]
irb(main):006:0> c.delete_at(0)
=> #<Category id: 1, name: "15 anos", description: nil, created_at: "2011-09-22 04:52:53", updated_at: "2011-09-22 04:52:53">
irb(main):007:0> c
=> []
答案 3 :(得分:1)
如果必须在SQL无法执行的应用程序代码中进行某些处理,并且结果必须是已更改的查询对象,则通过id
重新查询对象可能是(内存效率非常低)选项。 / p>
needed_ids = Model.where(<some original query>).map{|r| r.something? ? r.id : nil }.compact
new_collection = Model.where(id: needed_ids)