web-dev-qa-db-fra.com

Comment ajouter un message de confirmation avec link_to Ruby on rails

Je voulais ajouter un message de confirmation sur la fonction link_to avec Ruby.

= link_to 'Reset message', :action=>'reset' ,:confirm=>'Are you sure?'

Des idées pourquoi ça ne marche pas? 

53
Tini

Commencez par vérifier que votre mise en page contient jquery_ujs . Il est recommandé de le faire en l’incluant dans votre application.js

//= require jquery_ujs

Vérifiez que vous avez inclus application.js dans votre présentation:

= javascript_include_tag :application

En mode développement, affichez votre code HTML source et vérifiez que jquery_ujs.js existe.

Exécutez votre serveur et vérifiez que votre balise de lien a la valeur data-confirm, par exemple:

<a href="/articles/1" data-confirm="Are you sure?" data-method="delete">

Si toutes ces étapes sont correctes, tout devrait fonctionner!

Note: vérifier ce RailsCast http://railscasts.com/episodes/136-jquery-ajax-revised

41
dpaluy

Je peux me tromper, mais vous ne spécifiez pas de contrôleur avec l'option :action. Avez-vous essayé le suivant? En supposant que vous ayez une ressource messages configurée dans votre itinéraire:

link_to 'Reset', message_path(@message), :confirm => 'Are you sure?'

EDIT: ci-dessus est obsolète. Rails 4.0 accepte maintenant l'invite en tant qu'attribut de données. Voir la doc ici (Merci @Ricky).

link_to 'Reset', message_path(@message), :data => {:confirm => 'Are you sure?'}
125
James

Je ne me souviens pas comment cela a été fait dans Rails 3, mais dans Rails 4, vous pouvez simplement:

<%= link_to 'Reset message', { controller: 'your_controller', action: 'reset' }, data: {confirm: 'Are you sure?'} %>
10
Lukasz Muzyka

Essaye ça:

= link_to 'Reset message', {:action=>'reset'}, :confirm=>'Are you sure?'

ou pour être plus clair

= link_to('Reset message', {:action=>'reset'}, {:confirm=>'Are you sure?'})

Voir http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

Vous verrez qu'il y a 3 paramètres, quand vous donnez url comme options comme {:action => ..., :controller => ...}

link_to(body, url_options = {}, html_options = {})

En Ruby, si le dernier paramètre d'un appel de fonction est un hachage, vous n'avez pas besoin de l'envelopper avec des caractères {} (en d'autres termes, vous pouvez l'omettre dans le cas où, si le hachage est le dernier paramètre), le code que vous avez fourni sera interprété comme un appel de fonction avec seulement 2 paramètres, 'Reset message' chaîne et {:action=>'reset', :confirm=>'Are you sure?'} hachage et le :confirm=>'Are you sure?' sera interprété comme un url_option au lieu d'un html_option

3
rubyprince
<%= link_to "Delete this article", article_path(article), method: :delete,
                    data: { confirm: "Are you sure you want to delete the 
                    article?"}, class: "btn btn-xs btn-danger" %>

Un lien de bouton où article_path est le préfixe et (article) transmet la id requise par la méthode method: :delete . La dernière partie des codes ajoute un message de confirmation.

1
Ankit Wadhwana

D'une certaine manière ne fonctionne pas ces seuls codes de navigateur Safari Donc j'étais impliqué bouton ... 

<%= button_to('', delete_path(), method: "delete", data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>
0
Ryosuke Hujisawa

regardez cette vidéo sur rails pour une meilleure compréhension.

http://railscasts.com/episodes/205-unobtrusive-javascript

Documentation Rails pour link_to helper.

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

0
Sachin Singh

Regardez votre javascript_include_tag et cela devrait fonctionner correctement:

<%= link_to("Reset message", :method => :reset, :class => 'action', :confirm => 'Are you sure?') %>
0
Sumit Munot

Tout d’abord, nous devons comprendre quel paquet Js répond à ce type d’alerte dans l’application Rails. Donc, pour cela, le paquet jquery_ujs est responsable de l'affichage des alertes dans Rails.

Donc, vous devez avoir jquery & jquery_ujs dans votre fichier application.js.

//= require jquery
//= require jquery_ujs

Maintenant, nous devons confirmer que le fichier application.js est inclus ou non dans la mise en page requise. Par défaut, le fichier de présentation reste dans application.html.erb dans le dossier de présentation des vues.

<%= javascript_include_tag 'application' %>

Ensuite, le lien devrait avoir les attributs data-confirm & data-method comme

<a href="/message/1/reset" data-method="delete" data-confirm="Are you sure?">

En erb, cela peut être écrit ainsi:

= link_to 'Reset', message_path(@message), data: {method: 'delete', confirm: 'Are you sure?'}

Cela devrait fonctionner si tout est aligné de la même manière.

0
V K Singh