Я бы хотел, чтобы моя пользовательская модель очистила некоторые данные перед сохранением.Пока подойдет простое удаление пробелов.Поэтому, чтобы избежать регистрации людей в «Гарри» и притворяться, например, «Гарри».
Я предполагаю, что это хорошая идея сделать это удаление перед проверкой, чтобы 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).Я предполагал, что обратному вызову будут переданы значения.
Также: действительно ли это удаление является хорошей идеей?Или я должен скорее проверить на месте и сказать пользователю, что «Гарри» содержит недопустимую процедуру (я хочу разрешить «Гарри Поттер», но не «Гарри \ sPotter»).
Редактировать: Как указано вкомментарий, мой код неверен (вот почему я задавал вопрос ао).Пожалуйста, убедитесь, что вы прочитали принятый ответ в дополнение к моему вопросу для правильного кода и чтобы избежать тех же ошибок, которые я сделал.