何时在模型中使用`save`和`save!`?

根据保存你的脑袋,积极的logging会让你发疯 ,我们应该避免使用save! 并在特殊情况下rescue成语。 鉴于这一点,说一个模型需要@post.mark_rejected

如果mark_rejected的代码由于以下问题之一而失败,应抛出exception吗? :

  • 如果有validation问题
  • 如果一个非空字段被赋值为null
  • 如果有数据库连接丢失

如果我们不抛出exception,那么:

  • 控制器的行动将不得不检查mark_rejected返回值,并做它的事情
  • 我们并不期望从该方法调用中产生一个exception,所以我们不会在控制器动作中写一个rescue子句,因此这个exception冒泡到(..where)..并且可能会显示为一些(500 HTTP?)错误

示例代码:

 def mark_rejected ... save! end 

要么

 def mark_rejected ... save end 

在exception情况下会有更多的开销,所以存在一个性能问题,特别是在预计可能会经常抛出的情况下(比如save

这是更less的代码行来检查返回值是否比救援一个exception是错误的,所以我不明白如果你已经不得不抢救这个exception是如何检查返回值的问题。 多久save!一次exceptionsave! 在练习中有没有必要冒出呼叫栈? 很less,如果有的话,根据我的经验。

如果在调用save时抛出exception,而不是save! 你应该希望它显示一个500错误页面,因为这是发生了什么:一个不可恢复的,未知的,意外的内部服务器错误。

save! 如果不成功,将会引发错误。

save将返回true或false。