ruby-on-rails - 保存事务失败后救援中的rails对象

标签 ruby-on-rails validation transactions

我有一个事务来确保同时保存两个模型。

begin 
  Recipe.transaction do
    @recipe.save!
    if @dish
      @dish.save!
    end
  end
rescue

  #save failed
  flash[:notice] = "recipe.saved = #{@recipe.new_record?}"
  render 'form'
else
  #save worked
  flash[:notice] = 'Recipe added.'
  redirect_to(@recipe)
end

当其中一个模型的验证失败时,它会进入救援 block ,但是在救援 block 中,它表示该模型不是新记录。我期待验证导致事务失败,从而将模型对象作为新记录?我在这里错过了什么?

最佳答案

这两个保存中的哪一个实际上失败了? @recipe@dish 的那个?

事务由您的 DBMS 处理。例如,当 @dish 保存失败时,@recipe 可能已经保存,但会被您的 DBMS 恢复。然而,这发生在 Rails 背后,因此它不会恢复 @recipe 对象的状态。

关于ruby-on-rails - 保存事务失败后救援中的rails对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305126/

相关文章:

ruby-on-rails - 基础5升级: "Layer must be a document node"

ruby-on-rails - 如何组合 Ruby 正则表达式条件

java - Spring Transaction - 记录新事务的方法执行时间

java - 与数据源手动交互后回滚测试中的更改?

ruby-on-rails - Firefox 中的 rails csrf 验证

ruby-on-rails - 带有 master.key 的 Rails 5.2 - Heroku 部署

c# - asp.net 使用客户端验证而不发布到服务器

C++ 验证 - 截断设置为下一个输入

java - 纯Java验证框架

c# - TransactionScope 的层次结构