文档菜单
文档首页
/ / /
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

返回

回调