2012-08-25 21 views
7

Właśnie zaktualizowałem gem less-rails-bootstrap, aby użyć programu twitter bootstrap 2.1.0, i wygląda na to, że złamał ten kod w moim widoku, wewnątrz listy rozwijanej bootstrap :Usuwanie railsów nie działa w rozwijanym menu startowym twitter (2.1.0)

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

Serwer wydaje się myśleć, że jest to żądanie GET zamiast DELETE. Jednakże, jeśli wziąłem ten kod widoku i odłożyłem go bezpośrednio poza rozwijane menu, to działa świetnie, a serwer rozpoznaje żądanie DELETE.

Jeśli zmienię mojego gemfile jako takie:

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

Następnie uruchom aktualizację „pakiecie” i zrestartować serwer, a następnie ponownie wszystko działa jak oczekiwano. Ale jeśli po prostu:

gem 'less-rails-bootstrap' 

Następnie uruchom „bundle update” i zrestartować serwer, serwer myśli DELETE jest żądanie GET.

Próbowałem przełączyć się na gem "twitter-bootstrap-rails", a dokładnie ten sam problem występuje. Zakładam, że muszę robić coś złego?

+0

Nie jestem pewien, co tu jest przyczyną, ale może to mieć związek z tym, że szyny używa javascript, aby symulować formularz gdy podasz ': metoda =>: usuń 'w łączu za pomocą' link_to'. Aby uzyskać szczegółowe informacje, zapoznaj się z [dokumentacją] (http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to). Może coś dodanego w nowym bootstrapie powoduje konflikty z tym javascriptem. –

+0

Tak też myślałem, ale wciąż mam nadzieję, że tak nie jest. Nie znalazłem nikogo innego zgłaszającego ten sam problem, ale mogło być tak, ponieważ bootstrap 2.1.0 nie był zbyt długi. – robotron2000

+0

Zauważ, że nie działa javascript wywoływany wewnątrz rozwijanego menu. W swoim wylogowaniu link_to dodaj ' ' confirm: "Wyloguj?" ' i zauważ, że to też nie działa. – Arcolye

Odpowiedz

6

Tak, to jest Twitter Bootstrap kwestia. Prawdopodobnie zostanie naprawiony w następnym wydaniu. Tu, spróbuj tego szybko naprawić:

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

Dzięki. Wystarczy odkleić handler z zatrzymaniem propagacji za pomocą wywołania 'off'. –

+0

Przepraszamy za to, ale gdzie ten kod faktycznie działa? – Marc

+0

Koleś! Niesamowite. Marc, po prostu umieść blok '$ (function() {...});' w twoim pliku application.js. – andrerobot

2

Widocznie inni mają ten sam problem, a także: https://github.com/twitter/bootstrap/issues/4688

Szybka poprawka z devise na razie wydaje się, aby zmienić devise.rb obejmuje:

config.sign_out_via = :get 
+2

To zadziała, ale ogólnie uważane jest za wzorzec uniemożliwiający wylogowanie się z aplikacji za pośrednictwem GET. Kilka konkretnych powodów - web proxy i akceleratory przeglądania mogą wstępnie pobrać linki do punktu końcowego wylogowania, nieumyślnie rejestrując użytkownika. W dowolnym miejscu w Internecie, w którym użytkownik może publikować znaczniki img, publikuje jeden, który wskazuje na punkt końcowy logowania, wylogowując użytkowników. –

Powiązane problemy