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