Если вы можете реализовать идентифицируемую разницу в идентификаторах ваших тегов и идентификаторов категорий, то вы можете использовать ограничения для их поиска. Например, если категории всегда начинаются с цифры, а теги - нет, вы можете сделать это.
match '/:id' => 'categories#show', :constraints => { :id => /^\d+/ }
match '/:id' => 'tags#show'
Первая строка будет соответствовать, только если :id
начинается с цифры. Если это не совпадает, вторая строка ловит остатки. Так; /67-something
направляется на контроллер категорий, а /something
направляется на контроллер тегов.