2012-08-25 11 views
7

Ich habe gerade den Edelstein less-rails-bootstrap aktualisiert, um twitter bootstrap 2.1.0 zu verwenden, und dieser Code scheint meiner Ansicht nach in einem Bootstrap-Drop-Down zu liegen :Rails löschen funktioniert nicht in Twitter bootstrap dropdown (2.1.0)

<%= link_to 'Logout', destroy_admin_user_session_path, :method => :delete %> 

Der Server scheint zu glauben, dass dies eine GET-Anforderung anstelle von DELETE ist. Wenn ich jedoch diesen Ansichtscode direkt außerhalb des Dropdown-Menüs ablege, funktioniert es großartig und der Server erkennt die DELETE-Anfrage.

Wenn ich mein gemfile als solche zu ändern:

gem 'less-rails-bootstrap', '~> 2.0.4' 

Dann laufen ‚Bündel update‘ und den Server neu starten, dann funktioniert alles wie wieder erwartet. Aber wenn ich einfach haben:

gem 'less-rails-bootstrap' 

Then 'Bündel update' ausführen und den Server neu starten, dann wird der Server denkt, dass die DELETE ist eine GET-Anfrage.

Ich habe versucht, auf den Edelstein "Twitter-Bootstrap-Schienen" zu wechseln, und das gleiche Problem tritt auf. Ich nehme an, ich muss etwas falsch machen?

+0

Ich bin nicht sicher, was die Ursache ist hier, aber es könnte mit der Tatsache zu tun hat, die Javascript Schienen verwendet eine Form zu simulieren, wenn Sie angeben, ': method =>: Löschen Sie auf einem Link mit 'link_to'. Weitere Informationen finden Sie in der Dokumentation (http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to). Vielleicht ist etwas, das im neuen Bootstrap hinzugefügt wurde, mit diesem Javascript in Konflikt. –

+0

Das habe ich mir auch gedacht, aber ich hoffe immer noch, dass das nicht der Fall ist. Ich habe niemanden gefunden, der dasselbe Problem gemeldet hat, aber es könnte daran liegen, dass Bootstrap 2.1.0 noch nicht lange auf sich warten ließ. – robotron2000

+0

Beachten Sie, dass kein Javascript im Dropdown aufgerufen wird. Fügen Sie in Ihrer Abmeldung link_to 'config:" Logout? "' hinzu und beachten Sie, dass es auch nicht funktioniert. – Arcolye

Antwort

6

Ja, es ist ein Twitter Bootstrap Problem. Wahrscheinlich wird es in der nächsten Version behoben sein. Hier versuchen, diese schnelle Lösung:

$('body') 
    .off('click.dropdown touchstart.dropdown.data-api', '.dropdown') 
    .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }); 
+1

Danke. Es war genug für mich, den Handler für das Fortsetzen des Stoppen mit dem "Aus" -Ruf zu lösen. –

+0

Entschuldigung dafür, aber wohin geht eigentlich dieser Code? – Marc

+0

Alter! Genial. Marc, fügen Sie einfach einen '$ (function() {...});' -Block in Ihre application.js-Datei ein. – andrerobot

2

Offenbar andere das gleiche Problem, wie gut: https://github.com/twitter/bootstrap/issues/4688

Die schnelle Lösung mit devise jetzt devise.rb zu ändern scheint zu sein, umfassen:

config.sign_out_via = :get 
+2

Dies funktioniert, aber es wird allgemein als ein Anti-Pattern betrachtet, dass Ihre Anwendungsabmeldung über ein GET verfügbar gemacht wird. Ein paar konkrete Gründe - Web-Proxies und Browsing-Beschleuniger können Links zu Ihrem Logout-Endpunkt vorab abrufen, um den Benutzer versehentlich abzumelden. Und überall im Internet, dass ein Benutzer ein img-Tag veröffentlichen kann, das er auf Ihren Anmelde-Endpunkt verweist und Ihre Benutzer abmeldet. –

Verwandte Themen