会话
您可以使用会话与Mongoid类似的方式执行ActiveRecord中的事务。具体来说,您可以在模型类或模型实例上调用一个方法,#with_session
在模型类或模型实例上执行一些操作。块中的所有操作都将在一个会话的上下文中执行。请参阅MongoDB Ruby驱动程序的文档,了解可用的会话选项。
请注意以下会话的限制
会话不能在线程之间共享;会话不是线程安全的。这与Ruby驱动程序对会话的支持一致。
会话不能嵌套。您不能在将
#with_session
方法传递给另一个模型类或模型实例的块中,在模型类或模型实例上调用#with_session
。会话块中使用的所有模型类和实例必须使用相同的驱动客户端。例如,如果您为块中使用的另一个模型指定了与
storage_options
不同的选项,而不是在调用#with_session
的模型类或实例上,您将得到错误。
通过Model#with_session使用会话
在模型类上调用#with_session
并传递会话选项,以在会话上下文中执行代码块。
Person.with_session(causal_consistency: true) do Person.create! person = Person.first person.name = "Emily" person.save end
通过model#with_session使用会话
在模型实例上调用#with_session
并传递会话选项,以在会话上下文中执行代码块。
person.with_session(causal_consistency: true) do person.username = 'Emily' person.save person.posts << Post.create! end