세션
ActiveRecord에서 트랜잭션을 실행하는 것과 비슷한 방식으로 Mongoid로 세션을 사용할 수 있습니다. 즉, 모델 클래스 또는 모델의 인스턴스에서 #with_session
메서드를 호출하고 블록에서 일부 작업을 실행할 수 있습니다. 차단의 모든 작업은 단일 세션의 컨텍스트에서 실행됩니다. 사용 가능한 세션 옵션은 MongoDB Ruby 드라이버 설명서를 참조하세요.
다음과 같은 세션 제한 사항에 유의하세요.
세션은 스레드 간에 공유할 수 없습니다. 세션은 스레드로부터 안전하지 않습니다. 이는 Ruby 드라이버의 세션 지원과 일치합니다.
세션은 중첩될 수 없습니다. 다른 모델 클래스 또는 모델 인스턴스의
#with_session
메서드에 전달된 블록 내의 모델 클래스 또는 모델 인스턴스에서#with_session
를 호출할 수 없습니다.세션 차단 내에서 사용되는 모든 모델 클래스와 인스턴스는 동일한 운전자 클라이언트 를 사용해야 합니다. 예를 예시, 차단 에 사용된 다른 모델에 대해
#with_session
가 호출된 모델 클래스 또는 인스턴스 와 다른storage_options
를 지정한 경우 오류가 발생합니다.
Model#with_session을 통한 세션 사용
모델 클래스에서 #with_session
를 호출하고 세션 옵션을 전달하여 세션의 컨텍스트에서 차단 을 실행합니다.
Person.with_session(causal_consistency: true) do Person.create! person = Person.first person.name = "Emily" person.save end
모델#with_session을 통해 세션 사용
모델 인스턴스 에서 #with_session
를 호출하고 세션 옵션을 전달하여 세션의 컨텍스트에서 차단 을 실행합니다.
person.with_session(causal_consistency: true) do person.username = 'Emily' person.save person.posts << Post.create! end