Слаги, везде слаги!
Помните, я сравнивал базу данных с магической стопкой учетных карточек, которую вы можете просматривать так, как вам удобно? Нам нужен способ поиска конкретных записей, и именно потому в этих маршрутах встречается url. Содержание параметра url указывает базе данных, какую запись следует извлекать.
В качестве параметра можно использовать заголовок страницы, но тут есть одна проблема: браузеры не любят в интернет-адресах такие вещи, как пробелы, заглавные буквы и специальные символы (например, $ и %). В заголовках такие символы встречаются достаточно часто, поэтому от них нужно избавиться.
Строка, однозначно определяющая страницу сайта, называется слагом [43]. Слаг моей страницы будет основан на заголовке и подчиняться правилам, приемлемым для интернет-адресов.
1. Все символы строчные.
2. Никаких специальных символов — только буквы и цифры.
3. Никаких пробелов — все пробелы должны быть заменены на подчеркивание.
Для этого нужно создать метод, который берет заголовок страницы и форматирует его в слаг. Сложные замены выполняются при помощи метода программирования, получившего название регулярных выражений, который преобразует или находит текст в строках в соответствии с установленными правилами [44].
Регулярные выражения могут быть очень сложными, но применяются они широко, и я смог найти подходящий шаблон. Вот как выглядит мой метод:
…
# Converts page name into post slug
def slugify (content)
content.downcase.gsub (/ /, ‘-‘). gsub (/ [^a-z0–9-] /, «). squeeze (‘-‘)
end
Теперь я могу использовать метод slugify для преобразования строк типа «Заголовок Страницы» в «заголовок_страницы», которые можно использовать в составе интернет-адреса.
Кроме того, если мы храним слаг вместе с заголовком страницы, то можем использовать его для извлечения записи страницы при помощи параметра url.
Я добавил это поле к классу DataMapper:
…
property: slug, String
Теперь при создании страницы мы можем превратить ее заголовок в слаг, сохранить его в базе данных и использовать для демонстрации страницы, когда потребуется ее извлечь. Именно так приложение узнаёт, какую страницу показывать.