teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

トランザクションに関して記載を修正

2021/06/07 07:10

投稿

mingos
mingos

スコア4312

answer CHANGED
@@ -5,13 +5,16 @@
5
5
 
6
6
  > 2,DBを操作しないメールを送信するコードもトランザクション内であるので一個のトランザクション内に書くのか。
7
7
 
8
- トランザクションはDBに関する話なので、メールを送るだけならトランザクションである必要はありませんが、処理の順番が正しければトランザクション内で良いです
8
+ トランザクションはDBに関する話なので、メールを送るだけならトランザクションである必要はありません。
9
- 例えば、メールに関してはロールバックできませので、保存が成功した後送信処理を書く必要ります。
9
+ もちろトランザクション内書いても処理の順番正しければ意図通に動きます。
10
10
 
11
- 今回はcreate!(), update!()の後に書いているので、
11
+ 今回提示されているコードに関してはcreate!(), update!()の後にメール送信を書いているので、
12
- 成功した時しかメール送信処理に来ないのでこのままで良いいま
12
+ 成功した時しかメール送信処理に来ないため、保存に失敗したにメールが飛ぶといった事はありせん
13
+ (ビックリマーク付きのメソッドを使っているため、保存に失敗したら例外が発生するため)
13
14
 
15
+ でも、明確にトランザクションとメール送信は分けたほうがコードとしては分かりやすいです。
14
16
 
17
+
15
18
  > 3,上記コードのエラーを示すレスポンスに関して、 result = { error: { message: e.message } } とerrorの中に二重構造にした理由を知りたいです。 これはフロント側で何か使うために2重の構造にしているのか、調べてもあまり出てこなく、気になっております。
16
19
 
17
20