Я бы хотел, чтобы моя модель User дезактивировала некоторые данные перед сохранением. На данный момент простейшие пробельные пробелы. Поэтому, чтобы избежать регистрации людей с "Гарри" и, например, притвориться "Гарри" .
Я предполагаю, что это хорошая идея сделать это удаление перед проверкой, так что validates_uniqueness_of может избежать случайных дубликатов.
class User < ActiveRecord::Base
has_many :open_ids
validates_presence_of :name
validates_presence_of :email
validates_uniqueness_of :name
validates_uniqueness_of :email
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
before_validation :strip_whitespace, :only => [:name, :email, :nick]
private
def strip_whitespace(value)
value.responds_to?('strip') ? value.strip : value
end
end
Однако этот код содержит ошибку ArgumentError: неправильное количество аргументов (0 для 1). Я предположил, что обратный вызов будет передан значения.
Также: это зачистка на самом деле хорошая идея? Или я должен скорее обосноваться в космосе и сказать пользователю, что "Гарри" содержит недействительный пробел (я хочу разрешить "Гарри Поттер", но не "Гарри\s\sPotter" ).
Изменить: Как указано в комментарии, мой код неправильный (вот почему я задавал вопрос a.o.). Пожалуйста, убедитесь, что вы прочитали принятый ответ в дополнение к моему вопросу о правильном коде и избегаете тех же ошибок, которые я сделал.