如果找不到category
,我应该返回false
,并在转移完成后返回true
。或者我应该提出异常吗?
我还不清楚何时提出异常。
def transfer(amount, account)
category = Category.find_by(name: 'Transfer')
Account.transaction do
debit = Debit.new(amount: amount, account: self, category: category)
debit.save
credit = Credit.new(amount: amount, account: account, category: category)
credit.save
end
end
答案 0 :(得分:1)
我会对EJ2105提供的反对意见提出反对意见。
在这种特定情况下(我提供的意见比任何合理的建议更多),我会选择提出异常(并且可能会杀死程序并报告严重错误)。
类别"Transfer"
在您的应用程序中是硬编码的。无法找到的事实是一个严重错误,可能反映了数据库严重故障,例如缺少迁移或播种错误。
至于处理任何#save
错误,我可能会通知用户该交易没有通过。这似乎是一种可能的和预期的(如果不是快乐的)结果。
答案 1 :(得分:0)
这可以通过条件轻松处理:
$("#3rdback").click(function() {
if (!animated) {
$("#3rd").fadeOut(3500, 'swing');
$("#2nd").delay(3500).fadeIn(4500, 'swing');
}
});
你的意图也很清楚。所以我在这里没有使用异常。
但是,您确实希望引发异常的一个地方是您的事务,因为事务依赖于异常来触发回滚。因此,例如,您不想使用if Category.exists?(name: 'Transfer')
##process category
else
##handle error
end
。相反,使用#save
,这会在失败时引发异常。而且你会想要抓住这些例外,因为它们会冒泡:
#save!
如果这是一个向用户公开的操作,您还需要处理异常,以便向用户显示正确的页面并获取正确的错误消息。