2012-08-25 28 views
7

我剛剛升級了gem less-rails-bootstrap以使用twitter bootstrap 2.1.0,它似乎在我的視圖中打破了這段代碼,在引導下拉列表中:Rails刪除不工作裏面twitter引導下拉(2.1.0)

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

服務器似乎認爲這是一個GET請求,而不是DELETE。但是,如果我將該視圖代碼並立即放在下拉菜單之外,那麼它很好,並且服務器可以識別DELETE請求。

如果我改變我的Gemfile這樣:

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

然後運行「捆綁更新」並重新啓動服務器,然後一切都將按預期再次。但是,如果我只是有:

gem 'less-rails-bootstrap' 

然後運行「捆綁更新」並重新啓動服務器,然後服務器認爲DELETE是一個GET請求。

我試着切換到gem'twitter-bootstrap-rails',併發生完全相同的問題。我認爲我必須做錯什麼?

+0

我不知道原因是什麼在這裏,但它可能與軌道的事實做使用JavaScript來模擬形式在指定':方法=>:使用'link_to'在鏈接上刪除'。有關詳細信息,請參見[文檔](http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to)。也許在新的引導程序中添加的東西與該JavaScript相沖突。 –

+0

這就是我的想法,但我仍然希望事實並非如此。我還沒有發現其他人報告過這個相同的問題,但可能是因爲bootstrap 2.1.0沒有很長時間。 – robotron2000

+0

請注意,在下拉菜單中不會調用JavaScript。在您的登出link_to中,添加 '確認:「註銷?」' 並注意它也不起作用。 – Arcolye

回答

6

是啊,這是一個Twitter的引導問題。可能會在下一個版本中修復。在這裏,試試這個快速修復:

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

謝謝。只需將傳播停止處理程序與「關閉」呼叫解除綁定就足夠了。 –

+0

對不起,但代碼實際上在哪裏? – Marc

+0

夥計!真棒。 Marc,在你的application.js文件中放入一個'$(function(){...})'塊。 – andrerobot

2

顯然其他人有同樣的問題還有:https://github.com/twitter/bootstrap/issues/4688

快速修復與設計一種現在看來是改變devise.rb包括:

config.sign_out_via = :get 
+2

這會起作用,但它通常被認爲是反模式,讓您的應用程序註銷通過GET公開。一些具體的原因 - 網絡代理和瀏覽加速器可能會預取鏈接到您的註銷端點,從而無意中將用戶註銷。在互聯網上的任何地方,用戶可以張貼img標籤,他們發佈一個指向您的登錄端點,註銷您的用戶。 –