ruby on rails rails查询 如何从Activerecord查询结果集中删除项目?




ruby rails介绍 (4)

我从Rails查找查询中获取结果集。 我想迭代结果集,并根据某些条件从该结果集中删除记录,然后再将其传递以进行进一步处理。 附加条件在数据库中保存的数据外部,因此我不能将它们包含在原始的“查找”查询中。

注意我不想从数据库中删除任何记录只是从结果集中删除它们。

请有人给我代码来做到这一点。


如果必须在SQL无法执行的应用程序代码中进行某些处理,并且结果必须是已更改的查询对象,则通过id重新查询对象可能是(内存效率非常低)选项。

needed_ids = Model.where(<some original query>).map{|r| r.something? ? r.id : nil }.compact
new_collection = Model.where(id: needed_ids)

set = MyObject.find(...)
set = set.reject{|s| ... }

要么

set = set.select{|s| ... }

您也可以使用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
=> []

使用reject

Model.find_all_by_xxx().reject { |r| r.something? }




activerecord