在ActiveRecord查询批处理集合上迭代



我有一个表,它有几千组2-3条几乎相同的记录,它们都共享一个唯一的"id";(不是数据库ID,而是项目ID)。也就是说,两到三个记录共享相同的项目id,并且大约有2100条记录,或~700个唯一的项目。例子:

{id: 1, product_id:333, is_special:true}, {id:2, product_id:333, is_special:false}, {id:3, product_id:333, is_special:false}, {id:4, product_id:334, is_special:false}...

我想执行一个查询,让我遍历每个集合,修改/删除重复的记录,然后移动到下一个集合。

这是我目前拥有的:

task find_averages: :environment do
responses = Response.all
chunked_responses = responses.chunk_while { |a,b|  a.result_id == b.result_id}.to_a
chunked_responses.each do |chunk|
if chunk.length < 3
chunk.each do |chunky_response|
chunky_response.flagged = true
chunky_response.save
end
else
chunk.each do |chunky_response|
**manipulate each item in the chunk here**
end
end
end
end

编辑。在发现chunk_while方法后,我解决了这个问题。我不确定chunk_while是最有效的方法,但它工作得很好。我要关闭这个,但是任何需要分组记录然后迭代它们的人,这应该有帮助。

下面的代码应该遍历一组元素,其中一些元素具有共同的值,并按共同的值对它们进行分组:

responses = Responses.all
chunked_responses = responses.chunk_while { |a,b|  a.result_id == b.result_id}.to_a
chunked_responses.each do |chunk|
chunk.each do |chunky_response|
**manipulate each item in the chunk here**
end
end

最新更新