find_each depends on sequential ids to query for batches. It does this to get batches:
2.0.0-p353 :024 > Catalog.find_each { }
Catalog Load (4.3ms) SELECT `catalogs`.* FROM `catalogs` ORDER BY `catalogs`.`id` ASC LIMIT 1000
Catalog Load (2.6ms) SELECT `catalogs`.* FROM `catalogs` WHERE (`catalogs`.`id` > 2088) ORDER BY `catalogs`.`id` ASC LIMIT 1000
Catalog Load (2.4ms) SELECT `catalogs`.* FROM `catalogs` WHERE (`catalogs`.`id` > 3088) ORDER BY `catalogs`.`id` ASC LIMIT 1000
If you’re ordering on something else there’s no way to pick out subsequent batches as the ids are not ordered.
You could use OFFSET and LIMIT but it’s going to be hard on the database.
Therefore the only safe and fast option is supported.