모듈: Mongoid::Clients::Sessions::ClassMethods

포함 항목:
몽고이드
다음에 정의됨:
lib/mongoid/clients/sessions.rb

상수 요약 접기

CALLBACK_ACTIONS =

이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

트랜잭션 콜백을 trigger 하는 데 사용할 수 있는 작업입니다.

[:create, :destory, :update]

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#after_commit(*args, &block) ⇒ 객체

트랜잭션 커밋 후 콜백 이 호출되도록 설정합니다. 콜백 은 트랜잭션 에서 문서 가 생성, 업데이트 또는 파기된 경우에만 호출됩니다.

메서드 매개변수 및 사용 가능한 옵션에 대한 자세한 내용은 ActiveSupport::Callbacks::ClassMethods::set_callback 를 참조하세요.



119
120
121
122
# 파일 'lib/mongoid/clients/sessions.rb', 줄 119

def after_commit(*args, &차단)
  set_options_for_callbacks!(args)
  set_callback(: 커밋, :after, *args, &차단)
end

#after_create_commit(*args, &block) ⇒ 객체

after_commit :hook, on: :create 의 단축키입니다.



131
132
133
134
# 파일 'lib/mongoid/clients/sessions.rb', 줄 131

def after_create_commit(*args, &차단)
  set_options_for_callbacks!(args, on: :create)
  set_callback(: 커밋, :after, *args, &차단)
end

#after_destroy_commit(*args, &block) ⇒ 객체

after_commit :hook, on: :destory 의 단축키입니다.



143
144
145
146
# 파일 'lib/mongoid/clients/sessions.rb', 줄 143

def after_destory_commit(*args, &차단)
  set_options_for_callbacks!(args, on: :destory)
  set_callback(: 커밋, :after, *args, &차단)
end

#after_rollback(*args, &block) ⇒ 객체

이 콜백 은 생성, 업데이트 또는 삭제가 롤백된 후에 호출됩니다.

옵션은 after_commit 문서를 확인하세요.



151
152
153
154
# 파일 'lib/mongoid/clients/sessions.rb', 줄 151

def after_rollback(*args, &차단)
  set_options_for_callbacks!(args)
  set_callback(:rollback, :after, *args, &차단)
end

#after_save_commit(*args, &block) ⇒ 객체

after_commit :hook, on: [ :create, : 업데이트 ]의단축키입니다.



125
126
127
128
# 파일 'lib/mongoid/clients/sessions.rb', 줄 125

def after_save_commit(*args, &차단)
  set_options_for_callbacks!(args, on: [ :create, :update ])
  set_callback(: 커밋, :after, *args, &차단)
end

#after_update_commit(*args, &block) ⇒ 객체

after_commit :hook, on: : 업데이트 의 단축키입니다.



137
138
139
140
# 파일 'lib/mongoid/clients/sessions.rb', 줄 137

def after_update_commit(*args, &차단)
  set_options_for_callbacks!(args, on: :update)
  set_callback(: 커밋, :after, *args, &차단)
end

#트랜잭션(options = {}, session_options: {}) { ... } ⇒ 객체

트랜잭션 컨텍스트 내에서 차단 을 실행합니다.

차단 에서 오류가 발생하지 않으면 트랜잭션 이 커밋됩니다. 오류가 발생하면 트랜잭션 이 중단됩니다. 오류는 'Mongoid::Errors::Rollback'을 제외하고 전달됩니다. 이 오류는 전달되지 않으므로 의도적으로 트랜잭션 을 롤백 하려는 경우 발생할 수 있습니다.

매개변수:

  • 옵션 (해시) (기본값: {})

    트랜잭션 옵션. 사용 가능한 세션 옵션은 운전자 설명서를 참조하세요.

  • session_options (해시) (기본값: {})

    세션 옵션. MongoDB 트랜잭션 은 세션 내에서 시작되어야 하므로 세션이 시작됩니다. 사용 가능한 세션 옵션은 운전자 설명서를 참조하세요.

수율:

  • 제공된 차단 은 트랜잭션 내에서 실행됩니다.

다음을 발생시킵니다.



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# 파일 'lib/mongoid/clients/sessions.rb', 줄 90

def 트랜잭션(옵션 = {}, session_options: {})
  with_session(session_options) do |Session|
    시작
      Session.with_transaction(옵션) do
        yield
      end. { run_commit_callbacks(Session) }
    구출 *transaction_not_supported_Exceptions
      올리다 몽고이드::오류::TransactionsNotSupported
    구출 몽고이드::오류::Rollback
      run_abort_callbacks(Session)
    구출 몽고이드::오류::InvalidSessionNesting
      # 세션은 여기서 종료되어야 합니다.
      올리다 몽고이드::오류::InvalidTransactionNesting.신규
    구출 mongo::오류::세션이 유효하지 않습니다., mongo::오류::InvalidTransactionOperation => e
      run_abort_callbacks(Session)
      올리다 몽고이드::오류::TransactionError.신규(e)
    구출 StandardError => e
      run_abort_callbacks(Session)
      올리다 e
    end
  end
end

#with_session(options = {}) {|The| ... } ⇒ 객체

세션 컨텍스트 내에서 차단 을 실행합니다.

예시:

세션의 컨텍스트에서 일부 작업을 실행합니다.

Band.with_session(causal_consistency: true) do
  band = Band.create
  band.records << Record.new
  band.save
  band.reload.records
end

매개변수:

  • 옵션 (해시) (기본값: {})

    세션 옵션. 사용 가능한 세션 옵션은 운전자 설명서를 참조하세요.

수율 매개변수:

  • (Mongo::Session)

    차단 에 사용 중인 세션입니다.

반환합니다:

  • (객체)

    블록을 호출한 결과입니다.

다음을 발생시킵니다.

  • (Errors::InvalidSessionUse)

    세션이 시작된 다른 클라이언트 를 사용하여 모델에서 작업을 시도하거나 세션이 중첩된 경우.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 파일 'lib/mongoid/clients/sessions.rb', 줄 42

def with_session(옵션 = {})
  만약 스레드.get_session(클라이언트: persistence_context.고객)
    올리다 몽고이드::오류::InvalidSessionNesting.신규
  end
  Session = persistence_context.고객.start_session(옵션)
  스레드.set_session(Session, 클라이언트: persistence_context.고객)
  yield(Session)
구출 mongo::오류::세션이 유효하지 않습니다. => ex
  만약 mongo::오류::SessionsNotSupported === ex
    올리다 몽고이드::오류::SessionsNotSupported.신규
  other
    올리다 ex
  end
구출 mongo::오류::OperationFailure => ex
  만약 (ex.코드 == 40415 && ex.server_message =~ /startTransaction/) ||
     (ex.코드 == 20 && ex.server_message =~ /트랜잭션/)
    올리다 몽고이드::오류::TransactionsNotSupported.신규
  other
    올리다 ex
  end
구출 *transaction_not_supported_Exceptions
  올리다 몽고이드::오류::TransactionsNotSupported
보장
  스레드.clear_modified_documents(Session)
  스레드.clear_session(클라이언트: persistence_context.고객)
end