The BatchEnumerator in Rails is a utility that allows processing large sets of records in smaller, more manageable batches.
This approach helps to avoid loading large datasets into memory all at once, which can be inefficient and slow.
The in_batches
method provides a way to iterate over records in batches, applying actions to each batch sequentially.
The recent PR in Rails brings a significant improvement to the BatchEnumerator#destroy_all
method.
Previously, this method returned nil after destroying records in batches, providing no feedback on the number of affected rows.
From Rails version 7.2, it will now return the total number of destroyed records.
Before
Prior to the implementation of this feature, the method returned nil and to implement custom logic based on the affected rows, an additional query was required to count the records before deletion.
Let’s take an example to understand the behavior better
After
With the new change, we will now get total number of destroyed records in output and an additional query to count destroyed record will not be needed and it can also help in verifying that the expected number of records were affected.
To know more about this feature, please refer to this PR