在提交表单后,我需要进行一些处理,该表单最终会在多个表中保存多个记录。因为我需要的是全部或全部,所以我把它封装在一个事务块中。这个块似乎工作得很好,但是我不知道如何检查事务是否成功,这样我就可以返回一个适当的响应。
...
# Start a transaction block so we can back out if anything fails
ActiveRecord::Base.transaction do
# Journal Entry for from_account
gle = from_account.gl_journal_entries.create(....)
# Journal Line (x2)
gle.gl_journal_lines.create(....)
gle.gl_journal_lines.create(....)
# Journal Entry for to_account
gle = to_account.gl_journal_entries.create(....)
# Journal Line (x2)
gle.gl_journal_lines.create(....)
gle.gl_journal_lines.create(....)
end
# return something based on success/failure of transaction
...发布于 2013-10-30 18:19:12
一种选择是捕捉它可能抛出的错误或不抛出的错误。在这种情况下:
def my_method
...
ActiveRecord::Base.transaction do
# Journal Entry for from_account
gle = from_account.gl_journal_entries.create!(....)
# Journal Line (x2)
gle.gl_journal_lines.create!(....)
gle.gl_journal_lines.create!(....)
# Journal Entry for to_account
gle = to_account.gl_journal_entries.create!(....)
# Journal Line (x2)
gle.gl_journal_lines.create!(....)
gle.gl_journal_lines.create!(....)
end
# this code will only get executed if the transaction succeeds
rescue Exception => ex
# this code will only get executed if the transaction fails
end编辑:在本例中建议使用create!而不是create,因为如果出错,它将引发错误。
https://stackoverflow.com/questions/19690687
复制相似问题