🖥
#Rails の controller で処理の多重送信を防ぐために、model に 処理のid単位の履歴テーブルを作成して、transac
処理一個はユニークな proceeding_id を持つものとする
重複処理が起こった場合はレコードがINSERTできずにbad request を返す
処理本体が失敗した場合はrollbackされて再度処理可能状態となる
class SomeController
def create
ProceedingHistory.transaction do
begin
ProceedingHistory.create(proceeding_id: proceeding_id)
rescue ActiveRecord::RecordNotUnique
head :bad_request
return
end
do_something
end
head :ok
end
end
# == Schema Information
#
# Table name: proceeding_histories
#
# id :bigint not null, primary key
# created_at :datetime
# proceeding_history_id :string(255)
#
# Indexes
#
# index_proceeding_histories_on_proceeding_history_id (proceeding_history_id) UNIQUE
#
class ProceedingHistory < ApplicationRecord
end
Original by Github issue
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2019-12-23
Discussion