Вы можете настроить маршрут так:
match ':id' => 'threads#show'
match ':thread_id/:id' => 'posts#show'
Это будет работать, но это также вызовет проблемы для других маршрутов, поскольку оно будет не только соответствовать example.org/123/456, но также будет соответствовать example.org/user/mark
Чтобы убедиться, что он совпадает только с возможными (числовыми) идентификаторами моделей, вы можете добавить следующие ограничения:
match ':id' => 'threads#show', :constraints => { :id => /\d*/ }