transaction、payjp初心者です。
以下のようなアクションで
payjpで支払いをして
paymentsテーブルにsave!して
itemsテーブルにupdata!しています。
def create ActiveRecord::Base.transaction do item = Item.find(params[:item_id]) item.stock -= params[:quantity].to_i payment = Payment.new(payment_params) Payjp.api_key = ENV["PAYJP_SECRET_KEY"] charge = Payjp::Charge.create( amount: item.price.to_i * params[:quantity].to_i, customer: Card.find_by(user_id: current_user.id).customer_id, currency: 'jpy' ) payment.charge_id = charge.id payment.save! item.update!(stock: item.stock) redirect_to root_path rescue @item = Item.find(params[:item_id]) render "new" end end
間違っていたら申し訳有りません。
この場合、ActiveRecord::Base.transaction do 〜 rescue 間の
一連の処理に問題がない場合のみ
DBに反映されるのでデータの一貫性が担保されるものと理解しております。
質問内容は
Payjp::Charge.createが問題なく処理され、その後、payment.save!、item.update!で問題が発生した場合、
①Payjp::Charge.createは取り消されるのでしょうか?
②また、取り消されない場合はどのような処理を追記すべきでしょうか?
③Payjp::Charge.createで問題が発生した場合は
この記述でデータの一貫性が保たれると考えていますが、自分の考えに間違いはないでしょうか?
以上3点になります。
自身で様々なサイトを参考にして書きました。
問題点などありましたらご指摘いただきますと幸いです。
それでは宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/15 12:35