2013-09-11 3 views
0

Je pense qu'il est possible que plusieurs utilisateurs soumettent un formulaire provoquant l'écrasement des données. Ce est le flux d'actions dans l'ordre du temps:Rails Formulaire soumettre une condition de course?

1. User 1 clicks on Edit, rails render the page that has <form> and has value {A: 1, B: 2} 
2. User 2 clicks on Edit, rails render another page that has <form> and has value {A: 1, B: 2} 
3. User 1 updates value A to 5 and clicks on Submit, passing to server {A: 5, B: 2} 
4. Server updates to database to {A: 5, B: 2} 
5. User 2 updates value B to 10 and clicks on Submit, passing to server {A: 1, B: 10} 
6. Server updates to database to {A: 1, B: 10} 

Depuis le navigateur de l'utilisateur 2 avait les anciennes données. Lorsque B est envoyé, le champ A est passé en 1. La mise à jour de l'utilisateur 1 est écrasée.

Comment résoudre ce problème dans les rails?

Répondre

1

si vous utilisez des rails, vous devriez avoir le csrf_meta_tags cela crée une clé unique pour vous faire savoir que la forme a été présentée et est différent pour chaque utilisateur

1

S'ils vont le même enregistrement, vous êtes certainement exposé à la perte de données due à la course, sauf si vous vérifiez le dossier. Vous voudriez vérifier l'enregistrement pour vous assurer qu'il n'a pas changé pendant le processus de mise à jour.

Si vous générez un nouvel enregistrement, vous devez probablement dépendre de la base de données pour générer un enregistrement unique et un ID/clé pour celui-ci.