Более решение сложным, но многоразовые и с более мелкозернистыми сообщениями об ошибках.
валидатор:
приложения/валидаторы/username_convention_validator.rb
class UsernameConventionValidator < ActiveModel::EachValidator
def validate_each(record, field, value)
unless value.blank?
record.errors[field] << "is not alphanumeric (letters, numbers, underscores or periods)" unless value =~ /^[[:alnum:]._-]+$/
record.errors[field] << "should start with a letter" unless value[0] =~ /[A-Za-z]/
record.errors[field] << "contains illegal characters" unless value.ascii_only?
end
end
end
(Обратите внимание, это позволит - и не делает разрешающим не ASCII, для полноты '_.')
Использование:
приложение/модели/user.rb
validates :name,
:presence => true,
:uniqueness => true,
:username_convention => true
Это то, что я придумал: validates_format_of: имя пользователя,: с =>/^ [- аг \ d _] + $/ – atmorell
Если у вас есть ответ который решает вашу проблему, вы должны отметить ее как принятую. –