10
votes

Comment mettre un lien Supprimer dans un formulaire de mise à jour?

J'ai une forme distante pour mettre à jour un modèle "point". C'est une forme assez ordinaire avec un bouton d'envoi.

Cependant, je voudrais également inclure un bouton "Supprimer" à côté du bouton "Mettre à jour".

Malheureusement, il y a un problème avec cela. Lorsque je clique sur le bouton 'Mettre à jour', il finit par supprimer la saisie - le lien Supprimer semble détourner le formulaire de mise à jour.

Edit: Je pense que je sais pourquoi le bouton de mise à jour est en train de supprimer. Lorsque j'ajoute le lien Supprimer au formulaire, il ajoute cette entrée: xxx

quel que soit le bouton, je appelle ce paramètre "_method" est en cours de ramassage! < P> Maintenant, je sais que je peux simplement positionner le bouton Supprimer avec l'élément de formulaire, mais dans ce cas, je ne suis pas autorisé à.

Je suppose que le bouton Supprimer pourrait simplement être un autre bouton de soumission de la mise à jour, mais avec un paramètre supplémentaire: supprimer_techis.

Cependant, quelque chose à ce sujet ne se sent pas bien. Des idées?


0 commentaires

7 Réponses :


0
votes

Vous pouvez le faire:

<%= button_to 'Delete', point_path(point), :method => 'delete', :confirm => 'Are you sure?' %>


5 commentaires

Bonjour Mischa, c'est ce que j'ai essayé mais ce qui se passe est que le lien Supprimer semble "détourner" le formulaire de mise à jour - donc lorsque je clique sur le bouton "Mise à jour", il finit par supprimer! Désolé aurait dû expliquer le problème mieux.


Il n'y a aucun moyen de mettre le bouton Supprimer en dehors du formulaire?


J'ai une situation inconfortable où je ne peux pas. Pour style, j'ai besoin d'avoir le bouton dans un div (qui doit résider à l'intérieur du formulaire). Cependant, je ne peux pas mettre la forme à l'intérieur de ladite div non plus.


HM, dans ce cas, vous pouvez essayer une solution de contournement où le bouton Supprimer (qui est en fait un "formulaire de suppression" avec seulement un bouton et des champs masqués) est en dehors du formulaire et non visible et a un bouton à l'intérieur du formulaire qui soumet la cachée " Supprimer la forme "via JavaScript. Pas jolie, mais peut-être ça marche.


Oui qui fonctionnerait. J'ai réalisé que ce que j'ai fini avec une forme avec 2 boutons Soumettre. Donc, il y a une chose similaire à laquelle je pouvais faire où le bouton "Supprimer" ajoute l'élément: puis soumet ensuite le formulaire.



-1
votes

Vous feriez un lien_to 'del', une variable: confirmer => 'Êtes-vous sûr?',: Méthode =>: Supprimer

la: méthode =>: Supprimer appellera la partie détruire de votre contrôleur.


1 commentaires

Cela entraînera le problème que cet article essaie de résoudre. Voir une autre des questions d'explication: Stackoverflow.com/a/5991349/387310



1
votes

dans Rails 3 La façon recommandée de soumettre des formulaires à l'aide d'Ajax consiste à utiliser form_for code> en combinaison avec ujs code> plutôt que à distance_form_for code>. S'il vous plaît voir cette railscasts épisode pour plus d'informations.

alors quand le document est prêt / chargé, vous ajoutez un auditeur de clic sur chacun des boutons et agissez en conséquence: P>

$('#id_of_delete_button').click(function() {
  // serialize the form and submit it to the delete action
});

$('#id_of_update_button').click(function() {
  // serialize the form and submit it to the update action
});


3 commentaires

En fait, je suis passé à utiliser Form_for: Remote => True est-ce toujours obtrissé?


Form_for: Remote => TRUE génère des JS non obstrissant, mais je ne suis pas sûr que sans JS personnalisé, il peut gérer plusieurs boutons de la même forme.


Je voulais dire qu'il génère de manière discrète.



1
votes

Fondamentalement, la seule différence entre le «formulaire de mise à jour» et un «formulaire de suppression» est la présence de < P> Voici donc la solution de contournement que j'ai proposée: xxx


1 commentaires

Vraiment ancienne question, mais la voie à suivre sans le piratage JS ci-dessus est d'utiliser Soumettre_to pour générer le bouton Supprimer. Cela générera un nouveau formulaire HTML sur la page avec le _method = "Supprimer".



11
votes

Une autre solution de contournement curieuse qui ne nécessite pas de JavaScript, consiste à mettre le formulaire de suppression en dehors du formulaire de mise à jour, mais laissez une <étiquette pour = "thesubmittoButtoninthedeleform" > à l'intérieur du formulaire de mise à jour. Le formulaire de mise à jour continuera à fonctionner comme prévu, mais clique sur l'étiquette soumettra le formulaire Supprimer. Ensuite, stysez simplement l'étiquette comme un bouton.


2 commentaires

Qui sent un certain génie maléfique! Solution intelligente à un ancien problème - je pense que je vais essayer celui-ci.


Une note à ajouter à cette solution: le bouton de formulaire réel Les points d'étiquette doivent ne pas être défini pour afficher: Aucun. La solution ne fonctionne pas dans certaines versions de IE si le bouton n'est pas rendu. Une alternative de travail consiste à positionner le bouton réel loin de la gauche de la page.



1
votes
= f.button :submit, class: "btn-primary"
= link_to "Delete", f.object, class: 'btn btn-default', data: {method: 'DELETE'}
Delete link is styled with Bootstrap to look like a button. jquery-ujs hijacks clicks on links with data-method attribute and sends them with custom HTTP method.

0 commentaires

7
votes

Je recommanderais d'utiliser un lien plutôt que d'un bouton et de la style comme un bouton:

link_to("Remove", resource_url, method: :delete, class: "delete_button")


3 commentaires

C'est la meilleure façon de le faire.


Mais les rails ne créent pas de forme pour cela car la méthode est supprimée? Parce que cela générerait une forme à l'intérieur d'une forme, ce qui n'est pas valide


@Arnoldroa. Utilisation de link_to avec Méthode:: Supprimer produit un lien qui ressemble à: supprime