Ruby on rails ActiveRecord事务不引发错误

Ruby on rails ActiveRecord事务不引发错误,ruby-on-rails,activerecord,rails-activerecord,rails-api,Ruby On Rails,Activerecord,Rails Activerecord,Rails Api,我已经设置了一个ActiveRecord事务,但是当第二条语句失败时,它不会导致事务失败。这是我的密码: Contact.transaction do contact = Contact.create(params) channel = ContactChannel.create(contact: contact, phone: contact.phone) # ContactChannel query raises a validation error #

我已经设置了一个ActiveRecord事务,但是当第二条语句失败时,它不会导致事务失败。这是我的密码:

  Contact.transaction do
    contact = Contact.create(params)
    channel = ContactChannel.create(contact: contact, phone: contact.phone)
    # ContactChannel query raises a validation error
    # puts "ERRORS: #{channel.errors.messages}" outputs the following:
    #      {:channel_key=>["has already been taken"]}
    contact # Still returns the contact that was created
  end

你知道为什么即使验证出错,这也不会失败吗?

创建
而不是
create
应引发异常,该异常应导致事务回滚。它基本上是一个更严格的版本,如果没有引发异常,事务不会失败


要获取事务回滚的原因,您可以将事务语句包装在
begin(…)rescue
-块中,捕获
ActiveRecord::rollback
-错误,并使用其消息返回事务失败的原因。

!是否有方法返回该语句中的错误消息?我确实认为是这样,您可以执行
begin(…)rescue
-块或使用
after\u rollback
-回调。你可能得试一下,我还没来得及玩这个。也许社区可以告诉你更多。哦,很显然,ActiveRecord在回滚事务后会重新引发异常,我将编辑我的答案以包含该异常。我最终在控制器中得到了这段代码,结果看起来不太好:我认为这实际上相当不错,没有什么可添加的:-)