Я хочу проверить, что имя пользователя не имеет белых/пустых мест для моих пользователей. Есть ли встроенная проверка, которая делает это? Или что это лучший способ сделать это. Похоже, это было бы довольно распространенным требованием.
Rails Не проверять пробел в имени пользователя
Ответ 1
Я бы попробовал валидатор формата:
validates :username, format: { with: /\A[a-zA-Z0-9]+\Z/ }
поскольку большую часть времени, когда вы не хотите, чтобы пробелы в имени пользователя вам также не нужны другие символы.
Или, когда вам действительно нужно только проверить пробелы, вместо этого используйте without
:
validates :username, format: { without: /\s/ }
Полная документация: http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html#method-i-validates_format_of (validates ... format: {}
совпадает с validates_format_of ...
)
Ответ 2
Я считаю, что вам придется создать пользовательский валидатор:
validate :check_empty_space
def check_empty_space
if self.attribute.match(/\s+/)
errors.add(:attribute, "No empty spaces please :(")
end
end
Ответ 3
MurifoX ответ лучше, но поскольку это является общим требованием, я думаю, что это чаще используется:
class User < ActiveRecord::Base
validates :name, presence: true
end
Ответ 4
В вашей модели пользователя добавьте подтверждение. validates: username, format: {without:/\ s/} удалит белые/пустые места для ваших пользователей. Вы даже можете добавить сообщение, предупреждающее пользователя о том, что его имя пользователя содержит пробелы.
class User < ActiveRecord::Base
validates :username, format: { without: /\s/, message: "must contain no spaces" }
end
Ответ 5
Вы можете использовать обратный вызов before_validation для прокрутки пробелов
class User
before_validation :strip_blanks
protected
def strip_blanks
self.username = self.username.strip
end
end