https://teratail.com/questions/342357
「 Rails API 例外処理 create! or createなのか ベストプラクティスを知りたい 」 にてご回答いただけた内容に関しての質問になります。
質問内容
1,find_byでレコードを探したいときトランザクション内にて行うのかそれともトランザクション外部で行うのか。下記のコードではトランザクション外部で書いてみたコードになります。トランザクション内で行うのであればロジックは考えます...
2,DBを操作しないメールを送信するコードもトランザクション内であるので一個のトランザクション内に書くのか。
3,上記コードのエラーを示すレスポンスに関して、 result = { error: { message: e.message } }
とerrorの中に二重構造にした理由を知りたいです。
これはフロント側で何か使うために2重の構造にしているのか、調べてもあまり出てこなく、気になっております。
ruby
1# ご回答いただいた内容を参考に記述してみました。 2 3Class XXXcontroller < Applicationcontroller 4 5 def create 6 user = User.find(params[:id]) # 質問1 7 8 render json: status: 400, { message: "該当のユーザーはいません。"} if user.blank? 9 10 11 begin 12 ActiveRecord::Base.transaction do 13 user.create(...)! 14 Form.update!(is_completed: true) 15 Mailer.send_email # 質問2 16 end 17 18 render status: 200, json: { message: "会員登録に成功しました。メール送信を行いました。"} 19 20 rescue => e 21 22 result = {error: {message: e.message }} # 質問3 23 24 render status: 500, json: { result } 25 end 26 27 end 28end 29
質問1は別のやり方でも書いてみました。(トランザクション外での実装)
rescue_fromでまとめて、RecordNotFoundが出た時点でメソッド化したものを呼び出すか。
ruby
1 rescue_from ActiveRecord::RecordNotFound, with: :render_not_found_message 2 3 user = User.find(params[:id]) 4 5 private 6 7 def render_not_found_message 8 render json: status: 400, { message: "該当のユーザーはいません。"} 9 end
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/07 06:45
2021/06/07 07:08
2021/06/07 07:10