Придумайте: у пользователей есть уникальные URL, как мне запретить им использовать маршруты действий контроллера? - PullRequest
0 голосов
/ 04 июня 2011

В моем конфигурационном файле у меня есть эта строка (примечание: я использую cached_slugs из slugged gem):

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

Как запретить пользователям регистрироваться с маршрутами, которые в настоящее время используются для действий контроллера?

Например, пользователь может зарегистрироваться с именем пользователя 'users', и уникальный URL его профиля будет http://localhost:3000/users;, однако я использую этот маршрут для действия user # index. Я всегда мог установить его так, чтобы пользователям приходилось использовать традиционный способ http://localhost:3000/users/theusernametheychose, но я бы предпочел его другим способом для удобства пользователей. Любые предложения о том, как решить эту проблему? Большое спасибо!

1 Ответ

4 голосов
/ 04 июня 2011

Вы можете добавить проверку к вашей модели пользователя, которая проверяет снова существующие маршруты, определенные в приложении:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...