批量迭代表
Rails提供了一个名为in_batches
可用于分批遍历行。例如:
用户.in_batches(:10)做|关系|关系.update_all(updated_at:时间.现在)结束
不幸的是,这种方法的实现方式在查询和内存使用方面都不是很有效。
要解决这个问题,可以包含EachBatch
模块放入模型中,然后使用each_batch
类方法。例如:
类用户<ActiveRecord::基地包括EachBatch结束用户.each_batch(:10)做|关系|关系.update_all(updated_at:时间.现在)结束
这将最终产生如下查询:
用户负载(0.7ms)选择“users”。“id”FROM“users”WHERE(“users”)。"id" >= 41654) ORDER BY "users"。"id" ASC限制1偏移量1000(0.7ms) SELECT COUNT(*) FROM "users" WHERE ("users")"id" >= 41654) AND ("users"。"id" < 42687)
此方法的API类似于in_batches
,尽管它并不支持所有的论点in_batches
支持。你应该经常使用each_batch
除非你有一个特定的需求in_batches
.