Rails:如果某个项目无法保存,我是否应该抛出异常?

时间:2015-03-27 09:56:20

标签: ruby-on-rails activerecord

我经常发现自己处于这种状况。有时我只是理所当然地认为,如果我匆忙,记录将被正确保存,但我觉得这不是一个好习惯。我看到有时放置if save条件。问题出现在这里:无法保存记录的情况是什么?

1 个答案:

答案 0 :(得分:4)

  

无法保存记录的情况是什么?

如果您的任何验证失败。 (当然还有硬件故障,数据库连接丢失等)。

  

如果无法保存项目,我应该抛出异常吗?

如果您希望无效记录导致抛出异常,则无需自行执行此操作。 Rails已经可以做到了:

如果您的User模型有一些验证(emailname必须存在),您可以:

user.save!
  

保存!验证总是运行。如果其中任何一个失败,则会引发ActiveRecord :: RecordInvalid。

但是你可能不希望在这种情况下引发异常。例如,因为用户不输入有效密码是相当“常见的”。但 你应该处理错误,通常这样做的方式是:

if user.save
  #
else
  # handle error
end
  

默认情况下,保存始终运行验证。如果其中任何一个失败,则取消操作并保存返回false。

作为选择条件和例外情况的一般准则我喜欢this statement from DHH

  

为什么发送电子邮件会失败?因为您的SMTP服务器已关闭?这是一个特殊的状态,处理它有例外 - 不是条件。