在两个动作轨道中组合回滚4

时间:2015-06-11 21:42:56

标签: ruby-on-rails transactions rollback

可以在一个动作中启动一个事务并在另一个动作中执行回滚吗?这就是我想这样做的原因:

我正在创建一个用户可以生成订单的应用程序,该订单可以有多个服务,因此我有2个与订单服务相关的模型。有一个带有一些单选按钮和textarea的表单,用户将在其中介绍服务的特征,它有2个提交按钮,一个用于添加更多服务到该订单,第二个下一步。当用户点击下一步时,如果用户点击保存,则会重定向到可以查看所有服务的页面和保存的按钮然后我想保存订单和所有服务(5个服务生成的是表Service上的5条记录和表上的一条记录Order)。但是如果用户开始添加服务并且在某些时候决定离开页面我不想保存任何东西。

我认为这可以通过某种回滚来完成,或者可能有另一种方式。

1 个答案:

答案 0 :(得分:2)

简短的回答:不是没有。

更长的答案:交易是按照他们的原则定义的。他们会在他们内部完成任务,然后提交或回滚。

您无法按照提议的方式将它们分散到两个服务器操作上,因为在第一个操作结束时,事务必须提交或回滚...到服务器获取第二个操作时 - 任一个或另一个已经发生。

通常解决的方法是在订单中添加一个州。例如,一个名为“已提交”的布尔列或类似的东西。订单可以在“未提交”状态下创建 - 您的所有其他操作仅获取并使用“已提交”订单。如果用户离开页面,您可以让清扫程序清理任何未提交的订单(例如,如果未提交的订单超过2小时,则删除它们。)