46

Ich wollte eine Bestätigungsmeldung auf link_to mit Ruby Funktion hinzufügen.Wie bestätige Nachricht mit link_to Ruby auf Schienen

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

Irgendwelche Ideen, warum es nicht funktioniert?

+0

Mögliches Duplikat von [Rails - Wie man ein Bestätigungs-Popup auf ein fmit setzt?] (Http://stackoverflow.com/questions/15771582/rails-how-to-put-a-confirmation-popup-on -af-submit) –

+0

Dies scheint kein exaktes Duplikat des nominierten Exemplars zu sein. Das Beispiel fragt, wie eine Bestätigung zu einer Formularvorlage hinzugefügt werden kann. Diese Frage fragt, wie Sie einem Link eine Bestätigung hinzufügen können. –

Antwort

37

Zunächst sollten Sie überprüfen, ob Ihr Layout jquery_ujs haben. Best Practice, es zu tun, indem sie es in der Haupt application.js einschließlich:

//= require jquery_ujs 

Überprüfen Sie, ob Sie enthalten application.js in Ihrem Layout:

= javascript_include_tag :application 

Während im Entwicklungsmodus , sehen Sie Ihre Quelle html und überprüfen Sie jquery_ujs.js existiert.

dem Server ausführen und Ihr Link-Tag überprüfen, hat Daten bestätigen Wert, zum Beispiel:

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

Wenn alle diese Schritte richtig sind, sollte alles funktionieren!

Hinweis: Kontrolle dieses Railscast http://railscasts.com/episodes/136-jquery-ajax-revised

3

Try this:

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

oder mehr klar

= 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 sehen werden, dass es 3 Parameter, wenn Sie URL als Optionen wie {:action => ..., :controller => ...} geben

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

In Ruby, wenn der letzte Parameter in einem Funktionsaufruf ein Hash ist, müssen Sie nicht in {} Zeichen umbrechen (mit anderen Worten, Sie können das weglassen, falls der Hash der letzte Parameter ist), so der Code Sie wird mit nur zwei Parameter als Funktionsaufruf interpretiert werden, vorausgesetzt, 'Reset message' String und {:action=>'reset', :confirm=>'Are you sure?'} Hash und die :confirm=>'Are you sure?' wird als url_option anstelle eines html_option

+0

Dies ist neuer Code wie Sie vorgeschlagen = link_to ('Nachricht zurücksetzen', {: action => "reset"}, {: confirm => "Sind Sie sicher?"}) .... und das ist html Reset message Was ist 'Daten bestätigen' .... noch nicht geöffnet Nachricht bestätigen ... Danke. – Tini

+0

'data-*' sind [benutzerdefinierte Datenattribute] (http://www.w3.org/html/wg/drafts/html/master/dom.html#embbedding-custom-non-visible-data-with-the -data - * - Attribute) eingeführt in HTML5, die als Speicherbereiche für private Daten dienen. 'data-confirm' wird von Rails verwendet, um das Pop-up beim Klicken auf den Link erscheinen zu lassen. – veidt

+0

@Tini ... haben Sie <% = javascript_include_tag: defaults%> 'in das Layout oder die Seite eingefügt. Ohne dass es nicht funktioniert. – rubyprince

101

ich falsch sein könnte interpretiert werden, aber nicht angeben, einen Controller an mit der :action Option. Hast du folgendes versucht? Unter der Annahme, haben Sie eine messages Ressource in Ihrer Route konfiguriert:

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

EDIT: Über veraltet. Rails 4.0 akzeptiert die Eingabeaufforderung nun als Datenattribut. Siehe das Dokument here (Danke @Ricky).

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

Ich denke, dass dieser Stil veraltet ist. Gemäß den Rails-Dokumenten ist dies nun ein Datenattribut, dh '..., Daten: {bestätigen: 'Bist du sicher?'}' – Ricky

+0

@Ricky, du weißt diese Frage und fast alle Antworten auf dieser Seite wurden im Mai gepostet 21, 2013? Es ist September 2014 gerade jetzt. – veidt

+1

Ja. Verzeihen Sie, ich bin nicht vollständig in die Stackoverflow-Kultur eingetaucht! Jemand fragte danach, wurde hier geleitet und war verwirrt darüber, warum ': bestätigen' nicht zu funktionieren schien. ''data-confirm'' funktioniert, aber es ist nicht wirklich der aktuelle' rails way '. Mit anderen Worten: Was ist der beste Weg für mich, dies festzuhalten? – Ricky

0

Sehen Sie sich Ihre javascript_include_tag und es sollte funktionieren:

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

Wie oben erwähnt, ist ': confirm 'jetzt veraltet, so dass Sie entweder' "data-confirm" => verwenden müssen ... 'oder' data: {bestätigen: ...} '. – lucasarruda

10

Kann mich nicht erinnern, wie dies in Rails getan wurde 3, aber in Rails 4 können Sie einfach:

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

Diese Antwort hat mir am meisten geholfen; die Parameter getrennt mit '{' und '}' vor dem 'data - confirm' Teil zu gruppieren war was ich tun musste. –

0

Zuerst müssen wir das, was verstehen Das Js-Paket reagiert auf diese Art von Warnungen in der Rails-Anwendung. Daher ist das Paket jquery_ujs dafür zuständig, die Warnungen in den Schienen anzuzeigen.

Sie müssen also jquery & jquery_ujs in Ihrer Datei application.js haben.

Nun müssen wir bestätigen, dass die Datei application.js in Ihrem erforderlichen Layout enthalten ist oder nicht. Standardmäßig verbleibt die Layout-Datei in der Datei application.html.erb im Layout-Ordner der Ansichten.

<%= javascript_include_tag 'application' %> 

Als nächstes wird der Link sollte Daten-confirm & Daten-Methode Attribute wie

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

In erb haben, kann dies wie folgt geschrieben werden,

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

Dies ist, wenn alles funktionieren sollte auf die gleiche Weise ausgerichtet.