On voit bien que la première étape est de supprimer tous les paragraphes.
La ligne create_parts va recréer tous les paragraphes de la première et de la seconde partie.
L'appel à create_new_version est définit pour s'exécuter après le save (after_save).
Il faut savoir que, si un lien est invalide, le modèle link lève une exception sans gestion d'erreur et donc fait arrêter nette la procédure.
Ce que je ne sais pas, c'est si le modèle de link est appelé au moment de faire self.attributes = params ou au moment de faire save.
En plus, je ne sais pas si Rails fait des transactions dans MySQL, donc c'est un peu compliqué à expliquer ce qui se passe juste en regardant le code. Il faudrait que je reproduise aussi pour mieux analyser.
Mais en tout cas, s'il n'y a pas de transaction SQL, la news serait effectivement dans un mauvais état: les paragraphes ont été détruits et les nouveaux body/wiki_body n'ont pas été sauvés.
Mon Pull Request fait en sorte que le modèle link ne lève plus une exception brute, mais remonte une erreur de validtion. Au moins, ça n'arrête plus le processus d'un coup, mais ça perturbe uniquement les modifications sur les liens.
[^] # Re: Validation des liens et bookmarks
Posté par Adrien Dorsaz (site web personnel, Mastodon) . En réponse à l’entrée du suivi Corruption de dépêches et URL avec des caractères non ascii. Évalué à 2 (+0/-0).
Pour la réorganisation, on a, dans le modèle de news, le code:
On voit bien que la première étape est de supprimer tous les paragraphes.
La ligne
create_partsva recréer tous les paragraphes de la première et de la seconde partie.L'appel à
create_new_versionest définit pour s'exécuter après le save (after_save).Il faut savoir que, si un lien est invalide, le modèle
linklève une exception sans gestion d'erreur et donc fait arrêter nette la procédure.Ce que je ne sais pas, c'est si le modèle de
linkest appelé au moment de faireself.attributes = paramsou au moment de fairesave.En plus, je ne sais pas si Rails fait des transactions dans MySQL, donc c'est un peu compliqué à expliquer ce qui se passe juste en regardant le code. Il faudrait que je reproduise aussi pour mieux analyser.
Mais en tout cas, s'il n'y a pas de transaction SQL, la news serait effectivement dans un mauvais état: les paragraphes ont été détruits et les nouveaux body/wiki_body n'ont pas été sauvés.
Mon Pull Request fait en sorte que le modèle
linkne lève plus une exception brute, mais remonte une erreur de validtion. Au moins, ça n'arrête plus le processus d'un coup, mais ça perturbe uniquement les modifications sur les liens.