Лучшая постоянная ссылка для Rails
-
01-07-2019 - |
Вопрос
Как вы думаете, какой лучший способ создавать SEO-дружественные URL-адреса (динамически) в Rails?
Решение
Переопределить to_param
используйте метод в ваших классах модели, чтобы числовой идентификатор по умолчанию был заменен значимой строкой.Например, этот самый вопрос использует лучшая постоянная ссылка для rails в URL-адресе.
У Райана Бейтса есть Железнодорожный репортаж на эту тему.
Другие советы
У ActiveSupport есть новый метод в Rails для облегчения этого - String#parameterize.Соответствующий коммит является здесь;пример, приведенный в сообщении о фиксации, - "Дональд Э.Knuth".parameterize => "Дональд-и-Кнут"
В сочетании с переопределением to_param, упомянутым Джоном Топли, это значительно упрощает создание дружественных URL-адресов.
строковый индекс rsl это довольно круто, думайте об этом как о том, что permalink_fu сделано правильно.
Я в основном использую to_param
как предложил Джон Топли.
Не забудьте разместить индексы таким образом, чтобы все, что вы используете в to_param, было доступно для быстрого поиска, иначе в итоге вы получите полное сканирование таблицы при каждом доступе.(Нет усилитель производительности!)
Быстрый способ решения проблемы - поместить идентификатор куда-нибудь туда, и в этом случае ActiveRecord проигнорирует остальную его часть как ненужную и просто выполнит поиск по идентификатору.Вот почему вы видите много сайтов Rails с такими URL-адресами, как http://example.com/someController/123-a-half-readable-title .
Для получения более подробной информации об этом и других наблюдениях SEO из моего опыта работы с Rails вы можете найти эта страница на моем сайте полезно.
Для меня friendly_id работает нормально, он также может генерировать слаги, так что вам не нужно беспокоиться о дублирующихся URL-адресах, области также поддерживаются.
Ознакомьтесь с плагином permalink_fu (извлечен из Mephisto)...репозиторий Git - это расположенный здесь.
Я создал небольшой и простой gem, который упрощает переопределение метода to_param.Это можно найти здесь.