Я установил транзакцию ActiveRecord, однако, когда второй оператор выходит из строя, это не приводит к сбою транзакции. Вот мой код:транзакции 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
Любая идея, почему это не сработает, несмотря на ошибку проверки?
О, интересно! Есть ли способ вернуть сообщения об ошибках в этот оператор? –
Я так думаю, вы могли бы выполнить «start (...) rescue -block или использовать« after_rollback »-callback. Возможно, вам придется поэкспериментировать с этим, я не собираюсь играть с этим. Возможно, сообщество может рассказать вам об этом больше. – jfornoff
О, по-видимому, ActiveRecord повторяет исключение после отката транзакции, я отредактирую свой ответ, чтобы включить это. – jfornoff