За сценой числовая часть в начале имени файла преобразуется в целое число. Затем файлы миграции сортируются по версии. Так что он будет работать в той же последовательности, как вы описали:
001_smomething
002_blah
003_bookblah
20110022211973_smoething
Вы можете посмотреть, как это работает с исходным кодом . Вот важная часть:
# Get the number part as version.
version, name = file.scan(/([0-9]+)_([_a-z0-9]*).rb/).first
# Convert version to integer.
version = version.to_i
# Sort the files by version.
migrations = migrations.sort_by { |m| m.version }