Как вы можете убедиться, что имя пользователя не будет конфликтовать с существующим маршрутом? - PullRequest
4 голосов
/ 28 марта 2012

Так что я бы хотел, чтобы на моем сайте были URL-адреса, например http://foobar.com/hadees, которые переходят в чей-то профиль. Однако при регистрации имен пользователей, как мне убедиться, что они не выбирают что-то, что будет конфликтовать с моими существующими маршрутами?

Полагаю, мне нужно получить список существующих маршрутов, но я не уверен, как это сделать.

Ответы [ 2 ]

10 голосов
/ 28 марта 2012

Короткий поиск в Google дает мне следующее:

http://henrik.nyh.se/2008/10/validating-slugs-against-existing-routes-in-rails

В рельсах 3 метод перемещен в Rails.application.routes.recognize_path

Итак, я резюмирую:

class User < ActiveRecord::Base
  validates_format_of :name, :with => /\A[\w-]+\Z/
  validates_uniqueness_of :name
  validate :name_is_not_a_route

protected

  def name_is_not_a_route
    path = Rails.application.routes.recognize_path("/#{name}", :method => :get) rescue nil
    errors.add(:name, "conflicts with existing path (/#{name})") if path && !path[:username]
  end

end
2 голосов
/ 28 марта 2012

Хороший вопрос. Немного поработав, я обнаружил, что вы можете получить маршруты в своем приложении с помощью:

Rails.application.routes.routes.collect{|r| r.path}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...