FriendlyID - великолепная жемчужина.
Нетрудно реализовать пользовательский URL страницы.Создайте таблицу pages
с user_id
и link
class User < ActiveRecord::Base
has_many :pages
class Page < ActiveRecord::Base
belongs_to :user
has_friendly_id :link # link is name of the column whose value will be replaced by slugged value
. На page#new
вы добавляете ввод для атрибута link
.
Кроме того, вы можете установить friendly_id для заголовка или чего-то еще с помощью: use_slug => true.Таким образом FriendlyID возьмет название и изменит его так, чтобы в нем не было и ограниченных символов.Он будет использовать свою собственную таблицу для хранения слизней.Используйте cached_slug
для увеличения производительности.
Обновлено
Чтобы дать пользователям выбор, не хотят ли они устанавливать пользовательские ссылки, вы можете сделать это:
- Установите friendly_id в поле
link
без слагов. - Создайте виртуальный атрибут
permalink
, чтобы вы могли отображать его в своих формах. - В поле before_filter проверьте, является ли
permalink
установлено. - Если это так, запишите его в поле
link
. - Если это не так, напишите заголовок в поле
link
.
FriendlyID использует babosa
gem для генерации слагов.Если вы решите использовать его, вот как может выглядеть ваш фильтр:
protected
def generate_link
#you might need to use .nil? instead
self.link = self.permalink.empty? ? make_slug(self.title) : make_slug(self.permalink)
end
def make_slug(value)
value.to_slug.normalize.to_s #you could as well use ph6py's way
end