Validação de trilhos para garantir que um nome de usuário não colidir com uma rota existent
Quero garantir que os usuários não possam criar nomes de usuário que colidam com minhas rotas existentes. Eu também gostaria da capacidade de negar rotas futuras que eu possa definir. Estou pensando em fazer isso assim:
No modelo:
class User < ActiveRecord::Base
@@invalid_usernames = %w()
cattr_accessor :invalid_usernames
validates :username, :exclusion { :in => @@invalid_usernames }
end
Em alguns inicializadores:
User.invalid_usernames += Rails.application.routes.routes.map(&:path).join("\n").scan(/\s\/(\w+)/).flatten.compact.uniq
Is "Rails way"? Existe uma maneira melhor