Похоже, вы действительно хотите защитить от конфликтов маршрутизации, и это только слабо связано с именами методов в вашем контроллере.
Вы можете получить все маршруты во время выполнения от
Rails.application.routes.routes
Это дает вам массив из ActionDispatch::Routing::Route
экземпляров. Затем, чтобы получить маршруты GET:
gettable = Rails.application.routes.routes.select do |r|
r.verb == 'GET' || r.verb == '' # Watch out for "no verb" -> "all verbs"
end
и оттуда вы можете извлечь пути и проверить, что ваш тег не соответствует ни одному из них:
paths = Rails.application.routes.routes.
select { |r| r.verb == 'GET' || r.verb == '' }.
map { |r| r.path }
В результате вы получите список путей стиля /this/:that(.:format)
в paths
.
Как только все это будет выполнено, вы захотите, чтобы инициализатор приложения проверил, что вы не добавили в пространство имен /tag/
никаких маршрутов, которые соответствуют текущему состоянию базы данных тегов; в противном случае конфликты могут закрасться во время разработки.
Это должно убедить вас в том, что вам лучше хранить обычные маршруты для создания, просмотра и т. Д. В отдельном пространстве имен от ваших /tag/pancakes
удобных для человека / SEO маршрутов. Вы можете оставить обычные в /tag
, но переместить дружественных в /taxonomy/
, /category/
или что-то подобное.