1 つのオプションは、特定のモデルに合わせて調整された実装をモデル自体に配置することです (そういえば、idレコードの順序付けには通常より適切な選択ですが、created_at重複する可能性があります)。
class Thing < ActiveRecord::Base
  def self.find_each_desc limit
    batch_size = 1000
    i = 1
    records = self.order(created_at: :desc).limit(batch_size)
    while records.any?
      records.each do |task|
        yield task, i
        i += 1
        return if i > limit
      end
      records = self.order(created_at: :desc).where('id < ?', records.last.id).limit(batch_size)
    end
  end
end
または、物事を少し一般化して、すべてのモデルで機能させることができます。
lib/active_record_extensions.rb:
ActiveRecord::Batches.module_eval do
  def find_each_desc limit
    batch_size = 1000
    i = 1
    records = self.order(id: :desc).limit(batch_size)
    while records.any?
      records.each do |task|
        yield task, i
        i += 1
        return if i > limit
      end
      records = self.order(id: :desc).where('id < ?', records.last.id).limit(batch_size)
    end
  end
end
ActiveRecord::Querying.module_eval do
  delegate :find_each_desc, :to => :all
end
config/initializers/extensions.rb:
require "active_record_extensions"
PS私はこの回答に従ってコードをファイルに入れています。