会话
您可以使用 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