Ruby on rails 3 您如何确保用户名赢得';是否与现有路线冲突?
所以我希望在我的网站上有URL,这样就可以进入某人的个人资料。但是,当注册用户名时,我如何确保他们不会选择与我现有的路由冲突的内容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
我想我需要一份现有路线的列表,但我不知道怎么做。一个简短的谷歌搜索告诉我: 在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}