Не уверен, определяете ли вы оба эти значения рядом. По моему опыту, первый маршрут, который вы пытаетесь отобразить, на самом деле будет отлично обрабатываться вторым (благодаря значению по умолчанию, которое вы указали для attribute
).
Таким образом, этот маршрут:
foo.com/resources/user/:id/:attribute
С этим звонком:
foo.com/resources/user/12345/
Предполагается, что ваше значение атрибута по умолчанию:
foo.com/resources/user/12345//
Поскольку пустое значение может быть удалено вашим веб-сервером (apache рассматривает несколько слешей как один слеш), я бы рекомендовал установить в качестве атрибута значение по умолчанию для того, что может быть вызвано по имени, и оно будет работать подобно index.html файл в папке:
foo.com/resources/user/12345/
foo.com/resources/user/12345/general/ (same result)
Удача в устранении неполадок - построчное комментирование значений и требований маршрута по умолчанию. В конечном итоге вы видите «край» самого маршрута (так как он вернется к значениям по умолчанию, если вы предоставите ему меньше информации).
Также, в вашем примере, обратите внимание, что вы определяете свои id
требования дважды:
routes.user_attribute.reqs.id = "\d+"
routes.user_attribute.reqs.id = "reviews|lists"
Будет скорректировано на:
routes.user_attribute.reqs.id = "\d+"
routes.user_attribute.reqs.attribute = "reviews|lists"
Может повлиять и на ваши результаты. Надеюсь, это поможет.