在我的应用程序中,我有时会即时创建用户,并且用户的电子邮件必须是有效格式并且是唯一的。
我想根据哪个验证导致错误被重定向到不同的地方:格式无效与重复。
在我的代码中,我有
begin
user.save!
flash[:notice] = "Created new user #{email} with password #{password}"
rescue ActiveRecord::RecordInvalid => e
flash[:alert] = "Failed to create account because #{e.message}"
redirect_to SOMEPLACE
end
如果电子邮件格式无效(例如“user@example”) e.message 为“验证失败:电子邮件无效”
如果电子邮件已经存在于表中,e.message 为“验证失败:电子邮件已被占用”
我讨厌解析 e.message 文本以确定原因的想法......救援处理程序是否有更好的方法来检测引发 ActiveRecord::RecordInvalid 异常的根本原因?
PS我知道在这个例子中我可以在保存之前简单地检查已经存在的电子邮件,但我试图了解检测和处理不同验证失败并抛出相同异常的一般解决方案。