2012-08-25 14 views
7

私はtwitterのブートストラップ2.1.0を使用するためにgem less-rails-bootstrapをアップグレードしましたが、ブートストラップのドロップダウン内でこのコードが壊れているようです:railsはtwitterの中で動作しません。bootstrap dropdown(2.1.0)

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

サーバーは、これがDELETEではなくGET要求であると考えているようです。しかし、私はそのビューコードを取ってすぐにドロップダウンの外に置く場合、それは素晴らしい作品とサーバーはDELETE要求を認識します。

私のような私のgemfile変更する場合:「バンドルのアップデート」を実行して、サーバーを再起動し

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

を再び予想通り、その後、すべてが動作します。私は単に持っている場合しかし:次に

gem 'less-rails-bootstrap' 

「バンドルのアップデート」を実行して、サーバーを再起動し、その後、サーバーは、DELETEは、GETリクエストであると考えています。

私はgem 'twitter-bootstrap-rails'に切り替えようとしましたが、まったく同じ問題が発生します。私は何か間違っていなければならないと思いますか?

+0

ここで原因はわかりませんが、レールがjavascriptを使って ':method =>を指定するとフォームをシミュレートするということが関係している可能性があります。 'link_to'を使ってリンク上で「削除」します。詳細については、[documentation](http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to)を参照してください。新しいブートストラップに追加された何かが、そのJavaScriptと競合するかもしれません。 –

+0

それも私が考えていたものですが、私はまだこれが当てはまらないことを望んでいます。私はこの同じ問題を報告している他の誰かを見つけられませんでしたが、ブートストラップ2.1.0が非常に長いうちに終了していないことが原因です。 – robotron2000

+0

ドロップダウン内で呼び出されるjavascriptは機能しません。あなたのログアウトリンクで、 'を追加してください:「ログアウト?」「 – 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

ありがとうございます。伝播停止ハンドラを 'off'呼び出しでバインド解除するだけで十分でした。 –

+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タグを投稿できるインターネット上のどこにでも、ログインエンドポイントを指し示すものを投稿してユーザーをログアウトします。 –

関連する問題