Пытается использовать имя пользователя в моих маршрутах.Rails имя пользователя в URL
Маршруты, которые работают:
resources :users, only: [:show, :create, :update, :destroy]
get "/:username" => "users#show", as: :user
get "/:username/account" => "users#account", as: :user_account
get "/:username/interests", to: "users#interests", as: :user_interests
get "/:username/offers" => "users#offers", as: :user_offers
get "/:username/trades" => "users#trades", as: :user_trades
но теперь маршрут, такие как это:
get "/signup"
в настоящее время совпадающий с /:username
правила
Я знаю, что может изменить порядок своих маршрутов так что/регистрация появляется раньше, но это кажется немного взломанным.
Есть ли способы переписать это? Или это единственный способ иметь зарезервированную проверку имен пользователей?
Благодаря
EDIT
Я в конечном итоге добавив проверки в пользовательской модели с зарезервированными словами. Пространство имен - хорошая идея, но я не хочу загрязнять свои URL.
Для записи Twitter пространства имен не-имена пользователей, как это: twitter.com/i/discover (идет в Twitter открыть раздел) twitter.com/discover (идет к @ открыть Профиль пользователя)
Pinterest резерв имена, такие как «поиск», насколько я могу сказать
Я последовал подход Pinterest с кодом:
проверки:
validate :reserved_username
private
def reserved_username
reserved_usernames = %w[index show create destroy edit update signup interests interest item items search offers offer community about terms privacy admin map authentication]
errors.add(:reserved_username, "username is reserved for the app") if reserved_usernames.include?(username)
end
А что, если мое имя пользователя «Регистрация» или любой другой реальный путь вашего приложения? Чтобы избежать таких конфликтов, я настоятельно рекомендую вложить эти пути в их собственное пространство имен. – christianblais
Это не хаки. Так должен работать файл маршрутов. Вы можете добавить условие регулярного выражения на строку 'get '/: username' ', чтобы исключить'/signup', но это было бы полностью избыточным, чтобы иметь «get»/signup «» раньше. – depa
Согласен; ничего не взломано: маршруты обрабатываются по порядку. –