Ich wollte eine Bestätigungsnachricht für die Funktion link_to mit Ruby hinzufügen.
= link_to 'Reset message', :action=>'reset' ,:confirm=>'Are you sure?'
Irgendwelche Ideen, warum es nicht funktioniert?
Zuerst sollten Sie sicherstellen, dass Ihr Layout jquery_ujs . Hat. Bestens dazu sollten Sie es in Ihre Hauptdatei application.js einfügen:
//= require jquery_ujs
Stellen Sie sicher, dass Sie application.js in Ihr Layout aufgenommen haben:
= javascript_include_tag :application
Sehen Sie sich im Entwicklungsmodus Ihre Quell-HTML-Datei an und überprüfen Sie, ob jquery_ujs.js vorhanden ist.
Führen Sie Ihren Server aus und stellen Sie sicher, dass Ihr Link-Tag den Wert data-confirm hat. Beispiel:
<a href="/articles/1" data-confirm="Are you sure?" data-method="delete">
Wenn alle diese Schritte korrekt sind, sollte alles funktionieren!
Hinweis: Checken Sie diese RailsCast http://railscasts.com/episodes/136-jquery-ajax-revised
Ich bin möglicherweise falsch, aber Sie geben keinen Controller zusammen mit der Option :action
an. Hast du folgendes probiert? Angenommen, Sie haben eine messages
-Ressource in Ihrer Route konfiguriert:
link_to 'Reset', message_path(@message), :confirm => 'Are you sure?'
EDIT: Oben ist veraltet. Rails 4.0 akzeptiert jetzt die Eingabeaufforderung als Datenattribut. Siehe doc hier (Danke, Ricky).
link_to 'Reset', message_path(@message), :data => {:confirm => 'Are you sure?'}
Ich kann mich nicht erinnern, wie dies in Rails 3 gemacht wurde, aber in Rails 4 können Sie einfach:
<%= link_to 'Reset message', { controller: 'your_controller', action: 'reset' }, data: {confirm: 'Are you sure?'} %>
Versuche dies:
= link_to 'Reset message', {:action=>'reset'}, :confirm=>'Are you sure?'
oder um klarer zu sein
= link_to('Reset message', {:action=>'reset'}, {:confirm=>'Are you sure?'})
Siehe http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
Sie werden feststellen, dass es 3 Parameter gibt, wenn Sie url als Optionen wie {:action => ..., :controller => ...}
angeben.
link_to(body, url_options = {}, html_options = {})
Wenn der letzte Parameter in einem Funktionsaufruf in Ruby ein Hash ist, müssen Sie ihn nicht in {}
-Zeichen einhüllen (mit anderen Worten, Sie können diesen Wert weglassen, falls der Hash der letzte Parameter ist), also den von Ihnen angegebenen Code wird als Funktionsaufruf mit nur 2 Parametern interpretiert, 'Reset message'
string und {:action=>'reset', :confirm=>'Are you sure?'}
hash und der :confirm=>'Are you sure?'
wird als url_option
anstelle eines html_option
interpretiert
<%= 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" %>
Eine Schaltflächenverknüpfung, bei der article_path
das Präfix ist und (article)
die id
übergeben, die für die method: :delete
-Methode erforderlich ist ..__ Der spätere Teil der Codes fügt eine Bestätigungsmeldung hinzu.
Irgendwie klappt der Code nicht nur mit dem Safari-Browser Also ich war mit dem Button beschäftigt ...
<%= button_to('', delete_path(), method: "delete", data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>
sehen Sie sich dieses Rails-Video zum besseren Verständnis an.
http://railscasts.com/episodes/205-unobtrusive-javascript
Rails-Dokumentation für link_to-Helfer.
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
<%= link_to 'Reset Message', data: {confirm:"Are you sure?"} %>
denken Sie daran, den Pfad zwischen "Nachricht zurücksetzen" und Daten hinzuzufügen
Schauen Sie sich Ihren Javascript_include_tag an und es sollte gut funktionieren:
<%= link_to("Reset message", :method => :reset, :class => 'action', :confirm => 'Are you sure?') %>
Zunächst müssen wir verstehen, welches Js-Paket auf diese Art von Alarmen in der Rails-Anwendung reagiert. Daher ist das Paket jquery_ujs dafür verantwortlich, die Alarme in Rails anzuzeigen.
Sie müssen also jquery & jquery_ujs in Ihrer Datei application.js haben.
//= require jquery
//= require jquery_ujs
Nun müssen wir bestätigen, dass die Datei application.js in Ihrem erforderlichen Layout enthalten ist oder nicht. Standardmäßig verbleibt die Layoutdatei in application.html.erb im Layoutordner der Ansichten.
<%= javascript_include_tag 'application' %>
Als nächstes sollte der Link Datenbestätigungs- & Datenmethodenattribute aufweisen
<a href="/message/1/reset" data-method="delete" data-confirm="Are you sure?">
In erb kann dies geschrieben werden als
= link_to 'Reset', message_path(@message), data: {method: 'delete', confirm: 'Are you sure?'}
Dies sollte funktionieren, wenn alles gleich ausgerichtet ist.