8
votes

Ajout d'un lien Supprimer pour les attributs imbriqués

J'ai des attributs imbriqués dans mon show.erb et je crée un attribut imbriqué blanc et montrez une grille d'articles avec le blanc en bas comme. XXX

Je veux un lien_to ' Détruire 'travailler mais je reçois méthode non définie' pluriel ' lorsque j'ajoute ceci à la grille xxx


0 commentaires

3 Réponses :


1
votes

La variable que vous utilisez l n'est pas correcte. Lorsque vous cédez à partir d'un champs_for Block, l'objet Bloquer est une instance de FormBuilder pas une instance de l'objet lui-même. Quelle URL voulez-vous que le lien indique? Est-ce réponses # détruire ? Qu'est-ce que vous souhaitez envoyer à cette action pour identifier quoi détruire? Un link_to n'est pas un élément de formulaire. C'est juste un assistant pour une balise d'ancrage. Vous avez besoin d'une URL, pas d'un constructeur de formulaire pour construire ce lien.

Est-ce que cela va être une liste de formulaires de réponse? Un pour chaque réponse? Si tel est le cas, vous voudrez peut-être vous en protéger au lieu d'utiliser simplement champs_for .

Espérons que cela vous aide à obtenir sur la bonne voie.


1 commentaires

Oui, je suis un idiot pour ne pas passer le modèle au lieu du constructeur de formulaire



24
votes

Pourquoi voulez-vous utiliser un lien? Vous pouvez également utiliser la fonctionnalité Détruire dans les attributs imbriqués.

Tout ce que vous avez à faire est:

  1. Ajouter : allait_destroy => true dans votre accepte_nedes_attributes Définition
  2. Ajouter : _ allait_destroy aux params forts de votre contrôleur
  3. Ajouter <% = l.check_box '_Destroy'%> à votre modèle

    De cette façon, il supprime tous les enregistrements imbriqués avec la case à cocher vérifiée lors de la sauvegarde de l'enregistrement.


1 commentaires

Pour que cela fonctionne, vous devez également ajouter : _ détruire à votre param.require () dans le contrôleur pour que cela fonctionne. Ajoutez-le dans les attributs acceptés pour le modèle associé dont vous avez besoin pour



9
votes

Pour ceux qui trouvent cela à partir de Google, tandis que techniquement une case à cocher Supprimer pourrait être la bonne voie, je pense que c'est déroutant - le seul bénéfice est qu'il nécessite deux clics pour supprimer (sélectionnez la case et frappez mettre à jour). Il est peut-être préférable de simplement s'assurer que la suppression est claire ce qui se passe et peut éventuellement ajouter un moyen simple de le récupérer.

Ce qui suit consiste à envoyer la mise à jour sur le serveur comme Ajax, pour gérer la mise à jour de la page dans un rappel ou js Voir le fichier. Supprimer la télécommande: true et il fonctionnera comme un lien régulier. xxx


3 commentaires

Oui, cela fonctionne bien sur une relation has_many. De plus, pour obtenir une boîte de confirmation, vous pouvez ajouter , données: {confirmer: "Tu es sûr?" } juste après Méthode :: Mettez La seule chose que j'ai remarquée (au moins dans mon cas) était que l'élément a été supprimé mais la page n'a pas rechargé automatiquement.


Merci pour la confirmation sur HAS_MANY (aucune idée de la raison pour laquelle cela ne fonctionnerait pas). Ajout également quelques notes de votre commentaire sur la confirmation, et si vous supprimez la télécommande: True, il devrait fonctionner comme un lien régulier et rafraîchir la page - sinon, vous devez vous gérer vous-même.


Je suis d'accord, l'UX est vraiment bizarre avec une case à cocher Supprimer