Docs Menu
Docs Home
/ / /
Mongoid
/

セッション

項目一覧

  • Model#with_session 経由でのセッションの使用
  • model#with_session 経由でのセッションの使用

Mongoid では、ActiveRecord でトランザクションを実行するのと同様の方法でセッションを使用できます。 つまり、モデル クラスまたはモデルのインスタンスでメソッド #with_sessionを呼び出し、ブロック内でいくつかの操作を実行できます。 ブロック内のすべての操作は単一のセッションのコンテキストで実行されます。 どのようなセッション オプションが利用できるかについては、MongoDB Ruby ドライバーのドキュメントを参照してください。

セッションの次の制限に注意してください。

  • セッションはスレッド間で共有できません。セッションはスレッドセーフではありません。 これは Ruby ドライバーの セッションに対するサポートと整合性があります。

  • セッションはネストできません。 モデルクラスまたはモデルインスタンスの#with_sessionメソッドに渡されるブロック内のモデルインスタンスでは、 #with_sessionを呼び出すことはできません。

  • セッション ブロック内で使用されるすべてのモデル クラスと インスタンスは、同じドライバー クライアントを使用する必要があります。 たとえば、ブロックで使用される別のモデルに対して、 #with_sessionが呼び出されるモデル クラスまたはインスタンスとは異なるstorage_optionsを指定した場合、エラーが発生します。

モデル クラスで#with_sessionを呼び出し、セッション オプションを渡して、セッションのコンテキストでブロックを実行します。

Person.with_session(causal_consistency: true) do
Person.create!
person = Person.first
person.name = "Emily"
person.save
end

モデル インスタンスで#with_sessionを呼び出し、セッション オプションを渡して、セッションのコンテキストでブロックを実行します。

person.with_session(causal_consistency: true) do
person.username = 'Emily'
person.save
person.posts << Post.create!
end

戻る

コールバック