在我的配置文件中,我有这一行(注意:我正在使用来自slugged gem的cached_slugs):
match '/:id', :to => 'users#show', :as => 'user'
如何阻止用户注册当前用于控制器操作的路由?
例如,用户可以使用用户名“用户”注册,其个人资料的唯一网址为http://localhost:3000/users;但是,我正在为用户#index action使用该路由。我总是可以设置它,所以用户必须使用http://localhost:3000/users/theusernametheychose的传统方式,但我更倾向于用户友好的另一种方式。有关解决此问题的最佳方法的任何建议吗?非常感谢你!
答案 0 :(得分:4)
您可以向用户模型添加验证,以验证应用程序中定义的现有路由:
class User < ActiveRecord::Base
...
validates_exclusion_of :name,
:in => Rails.application.routes.routes.map {|r| r.path.match(/\/(\w+)\//) }.compact.map{|m| m[1] }.uniq,
:message => "Username %{value} is reserved.
end