Вместо того, чтобы делать user.save!
, обрабатывать user.save
if user.save
render status: :created, json: { msg: 'User was created.' }
else
render status: conflict, json: { msg: user.errors.full_messages.join(', ') }
end
версия взрыва (save!
) вызывает исключение, если объект не был сохранен по какой-либо причине, тогда как версия без взрыва (save
) возвращает true
, если объект сохранен, и false
, если это не.
Чтобы дополнительно различать тип ошибки проверки, вы можете использовать #added?
:
user.errors.added? :email, :taken
=> true, если ошибка уникальности электронной почты
user.errors.added? :email, :invalid
=> true, если ошибка форматирования электронной почты.