Ruby on rails 3 您如何确保用户名赢得';是否与现有路线冲突?

Ruby on rails 3 您如何确保用户名赢得';是否与现有路线冲突?,ruby-on-rails-3,routing,Ruby On Rails 3,Routing,所以我希望在我的网站上有URL,这样就可以进入某人的个人资料。但是,当注册用户名时,我如何确保他们不会选择与我现有的路由冲突的内容 我想我需要一份现有路线的列表,但我不知道怎么做。一个简短的谷歌搜索告诉我: 在rails 3中,该方法已移动到rails.application.routes.recognize\u路径 因此,我总结如下: class User < ActiveRecord::Base validates_format_of :name, :with => /\A

所以我希望在我的网站上有URL,这样就可以进入某人的个人资料。但是,当注册用户名时,我如何确保他们不会选择与我现有的路由冲突的内容


我想我需要一份现有路线的列表,但我不知道怎么做。

一个简短的谷歌搜索告诉我:

在rails 3中,该方法已移动到rails.application.routes.recognize\u路径

因此,我总结如下:

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
class用户/\A[\w-]+\Z的格式/
验证名称的唯一性
验证:名称\u不是\u路由
受保护的
def名称不是路由
path=Rails.application.routes.recognize_path(“/#{name}”,:method=>:get)rescue nil
错误。如果路径&,则添加(:name,“与现有路径冲突(/#{name})”!路径[:用户名]
结束
结束

问得好。通过一点修补,我发现你可以通过以下方式在应用程序中获取路线:

Rails.application.routes.routes.collect{|r| r.path}