Méthode RESTful permettant de créer plusieurs modèles dégradables dans un formulaire dans Rails

StackOverflow https://stackoverflow.com/questions/449317

Question

Jusqu'à présent, je n'ai pas été en mesure de trouver une solution permettant à un formulaire d'interagir avec deux modèles ayant une relation un à plusieurs. Supposons, par exemple, qu'un client ait plusieurs articles.

Actuellement, j'ai implémenté des solutions utilisant Javascript qui permettent aux utilisateurs d'ajouter / supprimer des lignes à la liste d'éléments. Restons simples, nous créons de nouveaux enregistrements ici.

Pour que cela devienne dégradable, j'ai plutôt créé un bouton "Ajouter un élément" qui valide une valeur différente. Ainsi, lors de mon action de création, je suis en mesure de capturer les nouveaux attributs et d'ajouter un nouvel élément au objet client.

Cependant, comme l’article est nouveau et n’a pas d’identifiant, je n’ai aucun moyen de supprimer un article en particulier. J'ai pensé à utiliser des index et ajouté des boutons / liens postaux à supprimer, mais cela rend tout en désordre et je ne peux pas utiliser mon partial pour des collections. Donc, je sens que c'est un bidouillage; y a-t-il une meilleure alternative?

Était-ce utile?

La solution

Vous souhaitez utiliser acess_nested_attributes_for. L’épisode mentionné par henrikloevborg dans Railscasts couvre une méthode permettant de faire ce genre de chose qui a été obsolète par accept_nested_attributes_for.

Vous pouvez le faire sans includes_nested_attributes_for. Ce qui pourrait être nécessaire si vous ne voulez pas passer à Rails 2.3.

Dans votre javascript pour supprimer un élément, vous devez ajouter un champ caché au formulaire appelé _delete avec la valeur true. Puis dans votre contrôleur. Ignorez tous les nouveaux enregistrements avec le champ _delete et détruisez tous les enregistrements existants.

Tout ce qui est intégré à accept_nested_attributes_for

Jouez avec le code dans le complexe-forms-exmample du référentiel github. Il s’agit essentiellement du code de Railscast # 75 mis à jour pour utiliser la fonctionnalité la plus récente, includes_nested_attributes_for.

Vous remarquerez qu'il n'utilise pas RJS pour effectuer l'ajout / la suppression dynamique d'enregistrements. Également comparé à ce que vous avez fait, cela crée lors de la soumission, pas lors d’un appel distant. L'ajout / la suppression automatique d'éléments est gérée à l'aide de balises content_for pour créer un modèle stocké dans une fonction javascript et de la bibliothèque Prototype pour modifier un champ masqué, qui accepte_nested_attributes_for et permet de détruire les objets que vous souhaitez supprimer.

Autres conseils

l'épisode n ° 75 de la retransmission télévisée est à ce sujet, si je comprends bien. votre question est correcte.

Je crois qu'il crée les éléments, puis les marque pour suppression si l'utilisateur regrette de les avoir créés.

Je pense que c’est la meilleure façon de traiter le problème et il existe des conseils pour gérer les validations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top