PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Les rails n'annulent pas la transaction après l'échec de l'enregistrement ()

L'ajout d'un élément à la collection l'enregistre immédiatement (sauf si l'utilisateur n'est pas enregistré). L'appel à enregistrer crée sa propre transaction et c'est ce qui est annulé, pas la transaction dans laquelle l'élément est enregistré

Vous pouvez forcer tout dans la même transaction en en créant une explicitement.

begin
  User.transaction do
    @user.items << item
    @user.save!
    render :json => {}, :status => :ok
  end
rescue ActiveRecord::RecordInvalid
  render :json => {:status => :error, :errors => item.errors}, :status => :bad_request
end