ActiveRecord回滚并返回RecordInvalid消息

时间:2015-07-09 06:13:06

标签: ruby-on-rails ruby activerecord

我想保存多个对象,如果其中任何一个失败,则回滚所有对象。但我还想呈现ActiveRecord :: RecordInvalid消息,以便用户知道它为什么不保存。我该怎么做?

def save_multiple_things_or_error
  ActiveRecord::Base.transaction do
    thing_one.save!
    thing_two.save!
  rescue ActiveRecord::RecordInvalid => exception
    # exception.message is what I want to render
    raise ActiveRecord::Rollback
  end
end

由于一些原因,这不起作用。我相信救援应该在开始结束块中,但是如果我提出回滚,我将失去RecordInvalid异常。

1 个答案:

答案 0 :(得分:1)

你可以尝试这个:

begin
  ActiveRecord::Base.transaction do
   thing_one.save!
   thing_two.save!
  end
rescue => e 
  raise ActiveRecord::Rollback
end

这适用于我的情况