Почему бы не работать на модели с необязательным аргументом?Оба эти URL кажутся работоспособными и легко разбираемыми:
/ZA/Pretoria/0030
/US/New-York/Nassau-County/Hicksville/51212/
И просто для того, чтобы бросить рассол в работе:
/AU/Victoria/Melbourne/3000
Если вы знаете, что у вас всегда будут значения дляваш первый, второй, последний и последний элементы, почему бы не сжать первый, а затем проанализировать ваши токены URL в обратном направлении?
# rubyish pseudocode
tokens = "/AU/Victoria/Melbourne/3000".split("/")
iso_country = tokens[0]
tokens.reverse!
tokens.drop_last_item!
zipcode = tokens[0] # => 3000
place_name = tokens[1] # => Melbourne
admin_division_2 = tokens[2] # => Victoria
admin_division_1 = tokens[3] # => nil / ""