设计:用户有唯一的URL,如何阻止他们使用控制器动作路由?

时间:2011-06-04 10:21:08

标签: ruby-on-rails ruby ruby-on-rails-3 devise

在我的配置文件中,我有这一行(注意:我正在使用来自slugged gem的cached_slugs):

match '/:id', :to => 'users#show', :as => 'user'

如何阻止用户注册当前用于控制器操作的路由?

例如,用户可以使用用户名“用户”注册,其个人资料的唯一网址为http://localhost:3000/users;但是,我正在为用户#index action使用该路由。我总是可以设置它,所以用户必须使用http://localhost:3000/users/theusernametheychose的传统方式,但我更倾向于用户友好的另一种方式。有关解决此问题的最佳方法的任何建议吗?非常感谢你!

1 个答案:

答案 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