从Rails查询结果集。我想遍历该结果集,并根据某些条件在进一步处理之前从该结果集中删除记录。附加的条件是不属于数据库中保存的数据,因此我不能将它们包含在原始的“find”查询中。
请注意,我不想从数据库中删除任何记录,只是将它们从结果集中移除。
请有人给我提供执行此操作的代码。
请注意,我不想从数据库中删除任何记录,只是将它们从结果集中移除。
请有人给我提供执行此操作的代码。
使用reject函数,如下:
Model.find_all_by_xxx().reject { |r| r.something? }
find_by_xxx
只返回一条记录。你应该使用 find_all_by_xxx
。 - Ryan Biggfind_by_xxx
返回的是一个集合。已经修改了。 - Fabioset = MyObject.find(...)
set = set.reject{|s| ... }
或者
set = set.select{|s| ... }
set
似乎被转换成了一个 array
? - Deekorfind
only returns one object. Perhaps you want MyObject.all
or MyObject.where
- Dylan Vander Berg如果应用程序代码中必须进行某些 SQL 无法完成的处理,并且结果必须是更改后的查询对象,则通过id
重新查询对象可能是一种(非常内存低效的)选项。
needed_ids = Model.where(<some original query>).map{|r| r.something? ? r.id : nil }.compact
new_collection = Model.where(id: needed_ids)
你也可以使用 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
=> []