[Rails] 여러 DB 처리를 취합한transsaction
6069 단어 TransactionRuby실무, 일, 총무Rails
개시하다
Rails 개발 애플리케이션을 통해 여러 테이블을 동시에 작성하는 데이터 처리가 가능합니다.
이 처리에서 어떤 처리가 실패한 상황에서 쌍방의 처리를 하지 않는transsaction이라는 개념을 알고 비망록 겸 출력으로transation과 실시한 내용을 기술한다.
이른바 transation
"transaction"이라는 단어의 정의를 찾아보세요.
[처리, 처리, 처리, 업무, 거래, 매매, 회보, 기요, 의사록] 위에서 말한 바와 같다.
IT 및 프로그래밍
"여러 처리를 한데 모아서 분할할 수 없습니다."
라는 정의를 내렸다.
이 글은 거래의 개념을 총결하여 매우 이해하기 쉬우니 참고하도록 제공한다.
거래란?아주 쉽게 말했어!
transaction 방법 사용 방법
"transaction"이라는 단어의 정의를 찾아보세요.
[처리, 처리, 처리, 업무, 거래, 매매, 회보, 기요, 의사록] 위에서 말한 바와 같다.
IT 및 프로그래밍
"여러 처리를 한데 모아서 분할할 수 없습니다."
라는 정의를 내렸다.
이 글은 거래의 개념을 총결하여 매우 이해하기 쉬우니 참고하도록 제공한다.
거래란?아주 쉽게 말했어!
transaction 방법 사용 방법
モデル.transaction do
# テーブルへのアクセス処理
# テーブルへのアクセス処理
end
# トランザクション処理が成功した場合の処理
rescue => e
# トランザクション処理が失敗した場合の処理
주의점은 처리 실패 시 예외가 발생하는 방법을 사용하는 것이다.만약 포함된 처리 중 어느 하나도 실패하면, 사무는 사무 중의 어느 것도 처리하지 않지만, 사무를 처리하지 않는 조건은 '이상 발생' 이다.
그럼 실제로 실시해 봅시다.
이루어지다
이번에 개발한 응용 프로그램에는 사용자의 그룹 기능이 있다.
따라서 새 그룹을 만들 때 그룹을 만든 사용자가 자동으로 그룹에 속하는 사용자가 된다고 가정합니다.
따라서 제작진 시절 예상치 못한 움직임이 생기지 않도록 이용 거래를 논의한다.
표 구조는 이렇다.
그룹 테이블 실례를 만드는 동시에user 로그인 사용자 idid 열 그룹users표 (users표와 그룹s표의 중간표) 를 만들고 싶습니다.
groups_controller.rb
# createアクション部分を抜粋
# 変数current_userにはログインユーザーのインスタンスが格納
def create
@group = Group.new(group_params)
# トランザクションを適用(グループの作成と中間テーブルを同時作成)
# save! と create! と「!」がついている点に注意!
@group.transaction do
@group.save!
current_user.group_users.create!(group_id: @group.id, permission: true)
end
# トランザクション成功時の処理
flash[:success] = '新しいグループを作成しました'
redirect_to @group
rescue => e
# トランザクション失敗時の処理
flash.now[:danger] = 'グループ作成に失敗しました'
render :new
end
이transation 내의 처리는 모두 "!"이다표 데이터 제작에 실패했을 때 예외적으로 발생하는 방법을 사용했습니다!만약transaction을 이용하지 않고 다음과 같은 방식으로 실현된다면, 어떤 원인으로 인해 groupusers표 제작에 실패하면 아무도 없는 그룹을 만들 수 있습니다.
groups_controller.rb
# transactionを利用しない場合
def create
@group = Group.new(group_params)
if @group.save
current_user.group_users.create(group_id: @group.id, permission: true)
flash[:success] = '新しいグループを作成しました'
redirect_to @group
else
flash.now[:danger] = 'グループ作成に失敗しました'
render :new:
end
end
최후
기사 읽어주셔서 감사합니다!
이번에는 조사를 하면서 방법을 강구해 보았지만, 솔직히 거래에 대한 이해는 그리 깊지 않았다.만약 잘못이나 더 좋은 기술 방법 등이 있다면 마음대로 평론해 주십시오.
아래의 보도를 참고하게 해 주세요.감사합니다.
Reference
이 문제에 관하여([Rails] 여러 DB 처리를 취합한transsaction), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tkmd35/items/45951c1ed418016af171텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)