我从Rails查找查询中得到结果集。我想迭代该结果集并根据结果集中的某些条件删除记录,然后将其传递给进一步处理。额外的标准是在数据库中保存的数据的外部,因此我不能将它们包括在原始的“查找”查询中。如何从Activerecord查询结果集中删除项目?
注意我不想从数据库中删除任何记录,只是将它们从结果集中删除。
请有人给我的代码来做到这一点。
我从Rails查找查询中得到结果集。我想迭代该结果集并根据结果集中的某些条件删除记录,然后将其传递给进一步处理。额外的标准是在数据库中保存的数据的外部,因此我不能将它们包括在原始的“查找”查询中。如何从Activerecord查询结果集中删除项目?
注意我不想从数据库中删除任何记录,只是将它们从结果集中删除。
请有人给我的代码来做到这一点。
您可以使用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
=> []
这将从数据库中删除条目,对吧? – JustBasti
如果一些处理必须在应用程序代码,SQL完成能够 不这样做,并且结果必须是已更改的查询对象,通过id
重新查询对象可能是一个(非常非常低效的内存)选项。
needed_ids = Model.where(<some original query>).map{|r| r.something? ? r.id : nil }.compact
new_collection = Model.where(id: needed_ids)
你有没有找到你要找的东西? – Magnum
这可以关闭为“太宽泛”或“建议使用非现场资源”。 – halfer