我正在为电子商务网站构建结帐页面,并且我有一个相当长的事务,它创建了一个新的用户模型和一个新的订单模型。我将这些模型的创建包装在一个事务中,这样如果一个验证失败,另一个就不会在数据库中徘徊。这是我的 OrdersController 中的精简代码:
rescue_from ActiveRecord::Rollback, with: :render_new
def render_new
render action: 'new'
end
ActiveRecord::Base.transaction do
@user = User.new params[:user]
unless @user.save
raise ActiveRecord::Rollback
end
//More stuff
...
@order = Order.new params[:order]
...
unless @order.save
raise ActiveRecord::Rollback
end
end
我看到的错误是这样的:
缺少模板订单/创建,使用 {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]} 的应用程序/创建
我很困惑为什么它试图呈现模板订单/创建和应用程序/创建而不是呈现订单/新。
有没有更好的方法来强制事务失败以便发生回滚?