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