個人、会社、電子メール アドレス、および電話番号を作成する API PeopleController に Create メソッドがあります。コード ブロックの最後で何か問題が発生した場合にすべてがロールバックされるように、このすべてのコードをtransactionにラップする必要があると感じています ( person.saveが下部で失敗した場合でも、Company、Emails で終了します)。など)。
これを行う最善の方法は何ですか?また、条件付きロジックをすべてトランザクション ブロック内に配置することはできますか?
def create
person = Person.new(person_params)
person.created_by = current_user.id
person.account = current_account
if params["company"] && params["company"].length > 1
person.company_id = Company.where(name: params["company"], account_id: current_account.id).first_or_create.id
end
if params["emails"]
if params["emails"]["primary"].length > 4
person.email_addresses << EmailAddress.create(address: params["emails"]["primary"], addressType: params["emails"]["primary_type"])
end
if params["emails"]["secondary"] && params["emails"]["secondary"].length > 4
person.email_addresses << EmailAddress.create(address: params["emails"]["secondary"], addressType: params["emails"]["secondary_type"])
end
end
if params["phonenumbers"]
if params["phonenumbers"]["primary"].length > 4
person.phone_numbers << PhoneNumber.create(number: params["phonenumbers"]["primary"], numberType: params["phonenumbers"]["primary_type"])
end
if params["phonenumbers"]["secondary"] && params["phonenumbers"]["secondary"].length > 4
person.phone_numbers << PhoneNumber.create(numberType: params["phonenumbers"]["secondary"], numberType: params["phonenumbers"]["secondary_type"])
end
end
person.save
render json: "Person saved."
end