refactor(champs): do not depend on attributes hash key in old code #10365
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pour comprendre cette PR, il faut comprendre comment fonctionnent les attributs imbriqués de
rails
.Par défaut, les attributs sont dans un tableau avec pour indices 0, 1, 2, etc. Cela nous posait problème, car cela signifie qu'il est impossible de régénérer un fragment du formulaire sans savoir combien de fragments sont déjà dans le formulaire. Comme rails n'utilise pas les indices du tableau, nous avons décidé d'utiliser
champ.id
comme indice dans le tableau. Plus tard, nous avons écrit du code qui avait besoin de savoir quels champs étaient inclus dans les attributs imbriqués. Par flemme, j'ai utiliséparams.keys
- ce qui donne la liste deschamp.id
. J'aurais dû chercher l'attribut[id]
dans chaque champ imbriqué dès le départ. Nous en arrivons à notre refactoring qui remplace les indices par leschamp.public_id
et en profitons pour ne plus répéter l'information. Dans le nouveau code, nous n'avons plus besoin de l'attribut[id]
. En revanche, nous avons besoin d'un attribut pour indiquer que nous envoyons dans un nouveau format, d'où[with_public_id]
.{ [123]: { id: 123, value: 'toto' } }
{ ['123-rowid']: { id: 123, value: 'toto' } }
||{ ['123-rowid']: { with_public_id: true, value: 'toto' } }
{ ['123-rowid']: { value: 'toto' } }
Passer de 1 à 2 est safe car Rails n'utilise pas les index du tableau des attributs imbriqués en interne. Ce sont des valeurs obscures de son point de vue.
Ce que je cherche à faire, c'est d'éviter de mettre un
if
dans le code qui génère l'attribut name d'un champ.