【发布时间】:2011-02-20 10:16:21
【问题描述】:
根据save bang your head, active record will drive you mad,我们应该避免在特殊情况下使用save! 和rescue 成语。鉴于此,假设模型需要@post.mark_rejected。
如果mark_rejected 中的代码由于以下问题之一而失败,是否应该抛出异常? :
- 如果存在验证问题
- 如果一个不可为空的字段被分配了一个空值
- 如果与数据库的连接丢失
如果我们不抛出异常,那么:
- 控制器操作必须检查
mark_rejected的返回值并执行此操作 - 我们不希望该方法调用出现异常,因此我们不会在控制器操作中编写
rescue子句,因此异常会冒泡到 (..wherever..) 并且可能会显示为一些 ( 500 HTTP?)错误
示例代码:
def mark_rejected
...
save!
end
或
def mark_rejected
...
save
end
【问题讨论】:
标签: ruby-on-rails-3