Сокрытие корневной категории из URL - StanZhuravlev/st_routes GitHub Wiki

Типовые CMS требуют наличия в URL указания типа обрабатываемой страницы. Примеры:

http://site.com/news/novost-1
http://site.com/articles/statya-o-lyagushkah
http://site.com/content/o-nas

В последнем примере, чтобы указать системе CMS на необходимость обработки статической страницы, используется часть /content. Однако для SEO предпочтительным является написание http://site.com/o-nas.

Чтобы получить подобные короткие ссылки, достаточно установить поле in_path в значение false. Пример:

# Создаем категорию для статических страниц
category = build(:st_routes_category, title: "Контент", controller: "content", in_path: true)
expect(category.slug).to eq "kontent"
category.save

# Создаем страницу. После создания она автоматически будет привязана к корневой категории
page = build(:st_routes_page, title: "О магазине", controller: :content)
expect(page.slug).to eq "o-magazine"
page.save

# Пример 1 - /kontent в пути
parser = StRoutes::URL::Parser.new("/kontent/o-magazine")
expect(parser.type).to eq(:page)
parser = StRoutes::URL::Parser.new("/o-magazine")
expect(parser.type).to eq(:not_found)

# Скрываем категорию из URL
category.in_path = false
category.save

# Пример 2 - /kontent исключен из пути
parser = StRoutes::URL::Parser.new("/kontent/o-magazine")
expect(parser.type).to eq(:not_found)
parser = StRoutes::URL::Parser.new("/o-magazine")
expect(parser.type).to eq(:page)