Docs 菜单
Docs 主页
/ / /
Mongoid
/

会话

在此页面上

  • 通过 Model#with_session 使用会话
  • 通过 model#with_session 使用会话

您可以使用 Mongoid 会话,就像在 ActiveRecord 中执行事务一样。 也就是说,您可以在模型类或模型实例上调用方法 #with_session ,并在区块中执行某些操作。 区块中的所有操作都将在单个会话的上下文中执行。 请参阅 MongoDB Ruby 驱动程序文档,了解可用的会话选项。

请注意会话的以下限制:

  • 会话不能跨线程共享;会话不是线程安全的。 这与 Ruby 驱动程序对会话的支持是一致的。

  • 会话不能嵌套。 您无法在传递给其他模型类或模型实例上的#with_session方法的区块内对模型类或模型实例调用#with_session

  • 会话区块中使用的所有模型类和实例必须使用相同的驾驶员客户端。 示例,如果您为区块中使用的另一个模型指定的storage_options与调用#with_session的模型类或实例不同,则会收到错误消息。

在模型类上调用#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

后退

回调