我经常发现自己处于这种状况。有时我只是理所当然地认为,如果我匆忙,记录将被正确保存,但我觉得这不是一个好习惯。我看到有时放置if save
条件。问题出现在这里:无法保存记录的情况是什么?
答案 0 :(得分:4)
无法保存记录的情况是什么?
如果您的任何验证失败。 (当然还有硬件故障,数据库连接丢失等)。
如果无法保存项目,我应该抛出异常吗?
如果您希望无效记录导致抛出异常,则无需自行执行此操作。 Rails已经可以做到了:
如果您的User
模型有一些验证(email
和name
必须存在),您可以:
user.save!
保存!验证总是运行。如果其中任何一个失败,则会引发ActiveRecord :: RecordInvalid。
但是你可能不希望在这种情况下引发异常。例如,因为用户不输入有效密码是相当“常见的”。但 你应该处理错误,通常这样做的方式是:
if user.save
#
else
# handle error
end
默认情况下,保存始终运行验证。如果其中任何一个失败,则取消操作并保存返回false。
作为选择条件和例外情况的一般准则我喜欢this statement from DHH:
为什么发送电子邮件会失败?因为您的SMTP服务器已关闭?这是一个特殊的状态,处理它有例外 - 不是条件。