Наиболее полную и удобную для пользователя документацию см. в руководстве FriendlyId.
FriendlyId — это «бульдозер швейцарской армии» среди плагинов для создания пробок и постоянных ссылок для Active Record. Он позволяет создавать красивые URL-адреса и работать с понятными для пользователя строками, как если бы они были числовыми идентификаторами.
Благодаря FriendlyId ваше приложение может легко использовать такие URL-адреса, как:
https://example.com/states/washington
вместо:
https://example.com/states/4323454
Задавайте вопросы о переполнении стека, используя тег «Friendly-id», а об ошибках читайте в разделе об ошибках.
FriendlyId предлагает множество расширенных функций, в том числе:
Добавьте эту строку в Gemfile вашего приложения:
gem 'friendly_id' , '~> 5.5.0'
Примечание. Вы ДОЛЖНЫ использовать версию 5.0.0 или выше для Rails 4.0+.
И затем выполните:
bundle install
Добавьте slug
столбец в нужную таблицу (например, Users
).
rails g migration AddSlugToUsers slug:uniq
Создайте дружественный файл конфигурации и новую миграцию.
rails generate friendly_id
Примечание. Вы можете удалить миграцию CreateFriendlyIdSlugs
если не будете использовать функцию истории слагов. (Читать далее)
Запустите сценарии миграции
rails db:migrate
Отредактируйте файл app/models/user.rb
следующим образом:
class User < ApplicationRecord
extend FriendlyId
friendly_id :name , use : :slugged
end
Отредактируйте файл app/controllers/users_controller.rb
и замените User.find
на User.friendly.find
class UserController < ApplicationController
def show
@user = User . friendly . find ( params [ :id ] )
end
end
Теперь, когда вы создаете нового пользователя следующим образом:
User . create! name : "Joe Schmoe"
Затем вы можете получить доступ к странице демонстрации пользователя, используя URL-адрес http://localhost:3000/users/joe-schmoe.
Если вы добавляете FriendlyId в существующее приложение и вам необходимо создать пулы для существующих пользователей, сделайте это из консоли, средства запуска или добавьте задачу Rake:
User . find_each ( & :save )
:allow_nil
Вы можете передатьallow_nil allow_nil: true
методу friendly.find()
, если хотите избежать поднятия ActiveRecord::RecordNotFound
и принять nil
.
MyModel . friendly . find ( "bad-slug" ) # where bad-slug is not a valid slug
MyModel . friendly . find ( 123 ) # where 123 is not a valid primary key ID
MyModel . friendly . find ( nil ) # maybe you have a variable/param that's potentially nil
#=> raise ActiveRecord::RecordNotFound
MyModel . friendly . find ( "bad-slug" , allow_nil : true )
MyModel . friendly . find ( 123 , allow_nil : true )
MyModel . friendly . find ( nil , allow_nil : true )
#=> nil
Пожалуйста, сообщите о них в трекере проблем Github для этого проекта.
Если вы хотите сообщить об ошибке, укажите следующую информацию:
Если у вас есть возможность, это поможет еще больше, если вы сможете создать форк FriendlyId на Github и добавить тест, воспроизводящий возникшую у вас ошибку.
Дополнительные сведения о том, как сообщать об ошибках, можно найти в этой статье.
FriendlyId изначально был создан Норманом Кларком и Адрианом Муньоло при значительной помощи Эмилио Тагуа на ранних этапах его существования. Сейчас его поддерживают Норман Кларк и Филип Арндт.
Мы глубоко благодарны многим добровольцам за щедрый вклад, внесенный на протяжении многих лет.
Copyright (c) 2008–2020 Норман Кларк и его участники, выпущено по лицензии MIT.
Настоящим бесплатно любому лицу, получившему копию данного программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), предоставляется разрешение на работу с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставлено Программное обеспечение, делать это при соблюдении следующих условий:
Вышеупомянутое уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ОТ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.