На моем веб-сайте объяснения лирики рэпа у каждого пользователя есть связанная страница "избранного" в http://rapgenius.com/USERNAME
Поскольку эти страницы избранного занимают корневое пространство имен, я должен удостовериться, что никто не берет имя пользователя, которое я уже использую для чего-то еще. Например:
/songs
/lyrics
/users
/posts
Как я могу искать все пути верхнего уровня, которые имеют более высокий приоритет, чем /username
маршрут (который является у основания routes.rb
) во время пользовательского создания, таким образом, я могу препятствовать тому, чтобы пользователи брали эти зарезервированные имена?
Почему бы не сделать вещи легче для себя и просто сделать:
def validate
reserved = %w(songs lyrics users posts)
errors.add(:username, 'is not allowed') if reserved.include?(username)
end
Два противодействия:
1) Почему страница «Фаворитов» для каждого пользователя нужно жить в корне дерева URI?
2) Как вы в настоящее время иметь дело с ситуацией, когда два пользователей выбирают одно и то же имя пользователя?
Если вы хотите потянуть в плагин, чтобы сделать это полезное, является , удобным
с их сайта
FromisiD - это «бульдозер армии Swiss Army». Плагины для Ruby на рельсах. Это позволяет создавать симпатичные URL-адреса и работать с дружелюбными чуматами, как если бы они были числовыми идентификаторами для моделей ActiveRecord.
Более того, важно для вас у него есть поддержка, чтобы убедиться, что модифицированные URL-адреса не соответствуют вам контроллерам / путях
Может быть, вы могли бы использовать этот?
Но, похоже, что он поднимается при отсутствии совпадения, так что вам, возможно, придется написать обертку, чтобы спасти ложь в этих случаях.
Я также только что понял, что вам также придется проверять любое совпадение, чтобы убедиться, что это не тот пользовательский маршрут, который вы захотите, чтобы он совпадал...