У меня есть два способа сделать это, предполагая, что n = 5:
Foo.order('id desc').offset(5).destroy_all
Это сортирует записи с первыми первыми и уничтожает все, что осталось за 5-ыми записями. Или
Foo.destroy_all(['id <= ?', Foo.order('id desc').limit(1).offset(5).first.id])
Это находит шестой последний идентификатор записи и удаляет все записи с идентификатором <= шестой последний идентификатор записи. </p>
Кроме того, вы можете посмотреть на этот вопрос SO .