Dites que j'ai beaucoup de blogs, et chaque blog has_many
messages. Ceux-ci sont stockés dans 2 tables ("blogs" et "posts"). Est-il possible d'ajouter une colonne supplémentaire (par exemple scoped_id) à la table de blog qui stocke un ID, délimité par le blog.Rails: Scoped ID en plus de l'ID principal
Exemple
Blog: 1
- Posts
- id: 1, scoped_id: 1
- id: 2, scoped_id: 2
- id: 3, scoped_id: 3
Blog: 2
- Posts
- id: 4, scoped_id: 1
- id: 5, scoped_id: 2
- id: 6, scoped_id: 3
Je sais que counter_cache peut garder une trace du nombre de postes scope par le blog parent. Cependant, je ne veux pas que le scoped_id
décrémente si un message est détruit.
Excellent. Merci! – Homar
Ce code est vulnérable à une condition de concurrence qui peut entraîner la création de deux ou plusieurs entrées de blog ayant le même scoped_id lorsque le serveur traite deux demandes simultanément. Par exemple, considérons la séquence suivante: (1) Demande A lit latest_scoped_post_id x, (2) La requête B lit le même latest_scoped_post_id x, (3) Demande A définit scoped_id à x + 1, (4) Demande B définit scoped_id à x + 1 (identique à la demande A). – antinome
Vous pourriez vous attendre à ce qu'une transaction protège contre des conditions de concurrence comme celle-ci, mais ce ne sera pas le cas, sauf si vous définissez le niveau d'isolation des transactions anormalement élevé (probablement une mauvaise idée de performance). – antinome