2013-04-03 19 views
11

Ich habe gerade begonnen, in Ruby auf Schienen zu kodieren und ich habe eine Anleitung verfolgt, die eine veraltete Version der Schienen verwendet, als ich verwende. Ich verwende 3.2.12: Bestätigen Sie in Schienen funktioniert nicht

Dies ist mein Code:

<%= button_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?' %> 

Von dem, was ich verstehe, sind diese Symbole, die auf Schienen geführt werden, die dann umgewandelt wird entweder eine HTML oder Javascript Aktion, die dann knallt das Meldungsfeld hoch und löscht das Objekt falls zutreffend. Der obige Code zerstört das Objekt, aber das Bestätigungsfeld wird nicht angezeigt. Warum ist das? Auch hatte ich das oben wie folgendes zunächst:

<%= link_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?' %> 

Das bestätigen Feld knallt unter keinen Umständen auf, mit link_to oder button_to. Unten ist das HTML, das bei der Überprüfung mit dem Inspektor von Chrome angezeigt wird. jQuery und jquery-ujs werden ebenfalls geladen, also bin ich mir nicht sicher, wohin ich von hier aus gehen soll.

<input name="_method" type="hidden" value="delete"> 
<input data-confirm="Are you sureeee?" type="submit" value="Destroy"> 
<input name="authenticity_token" type="hidden" value="Q2xicqELHYHtrwarbtPBe5PT2bZgWV5C+JdcReJI8ig="> 

Vielen Dank!

Antwort

50

Ich musste mein Bestätigungsattribut innerhalb des Datenattributs hinzufügen, damit es funktioniert. Ich benutze Rails 4 mit Bootstrap. Ich hoffe, dass dies jemand anderem hilft, der dieses Problem hat.

link_to 'Delete', @rule, method: :delete, data: { confirm: 'Are you sure you want to delete this alert?' } 
+0

Ja, das war es für mich. Vielen Dank. – Billy

+0

Nun, das funktioniert. – Avishai

+0

Arbeitete für mich mit Rails 4 und Foundation. Vielen Dank! –

9

Dieses auf jQuery basiert, stellen Sie sicher, die folgende Voraussetzungen erfüllt sein:

in Ihrem Gemfile

group :assets do 
    gem 'jquery-rails' 
end 

in Ihr Vermögen/Javascripts/application.js Datei, vor der Zeile //= require_tree .

//= require jquery 
//= require jquery_ujs 
+0

Ich habe beide der Tags, auf die Sie sich beziehen, aber es erscheint immer noch nicht das Bestätigungsfeld – jamesdlivesinatree

+0

Ich nehme an, Sie "bündeln installieren" und starteten Ihren Rails-Server neu? – Benj

+0

Wie kann ich testen, ob JavaScript funktioniert? Ich glaube nicht, und das ist das Problem. Ich bin mir nicht sicher, was das verursacht. – jamesdlivesinatree

5

Der Unterschied zwischen link_to und button_to ist das HTTP-Verb. link_to gibt GET-Anforderungen aus und button_gibt POST-Anfragen aus. Mit dem RESTful-Routing ist die Aktion delete eine POST-Anforderung an Controller/ID. Wenn Sie einen GET an Controller/ID ausgeben, wird es an die show Aktion gesendet.

AIUI, link_to mit etwas anderem als dem GET-Verb ist eine schlechte Idee. Eine, Rechtsklicks behalten das Verb nicht bei. Zweitens möchten Sie nicht, dass Bots die Seite crawlen, um dem Link zu folgen und dadurch die Aktion delete auszulösen, obwohl Sie wahrscheinlich angemeldet sein müssen, um die Datenbank tatsächlich zu ändern.

+1

Vielen Dank für Ihre Erklärung. Sehr informativ und macht jetzt viel mehr Sinn. Ich bin aber immer noch gespannt wie man das bekommt: Bestätigen Sie das Pop-Up. Das funktioniert immer noch nicht für mich. – jamesdlivesinatree

3

Fühle mich ziemlich dumm, aber adblock blockierte die Nachrichtenbox. Das tut mir leid. Alles ist gut, ich habe gerade Adblock deaktiviert.

+0

Lustig :) aber froh, dass Sie es gefunden haben :) – Benj

0

Ich habe einen Pop-up-Blocker in Chrome ausgeführt. Ich habe gerade http://localhost:3000 auf die weiße Liste gesetzt und es hat für mich funktioniert.