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?
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
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?'}
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?'} %>
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
<%= 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.
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...' }) %>
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
Regardez votre javascript_include_tag et cela devrait fonctionner correctement:
<%= link_to("Reset message", :method => :reset, :class => 'action', :confirm => 'Are you sure?') %>
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.