RailsでBootstrapのmodalが開いてすぐ閉じてしまう問題

開発していて地味にハマったのでメモ。

概要

削除・更新系の処理実行前に確認画面を表示するために、bootstrapのmodalを利用。 ボタンを押すとmodalが一瞬表示されるが、何もUI操作をしていないのにmodalダイアログが閉じてしまう。

原因

異なる2つのgemの中でbootstrapを読み込んでいたことが原因。私の場合は”sass-rails”に加えて、"jquery-datatables-rails"のbootstrapオプションを利用していたからでした。

似たような事象が以下で報告されているので共有。どうやらmodal起動時に2回toggle()が呼ばれて、1回目の呼び出しでmodal起動、即座に2回目が呼び出されて閉じているっぽいですね。

Modal Disappears Immediately · Issue #1611 · twbs/bootstrap · GitHub

Bootstrap Modal immediately disappearing - Stack Overflow

解決方法

bootstrapを呼び出しているGemのうち、片方の代替となるGemを探してそれを利用するとかでしょうか。もしくは、片方のGemでbootstrapを呼び出さないように、何かしら工夫をするとか(Gemによって対処方法は違うと思うので具体的な解決策を示すことができなくて申し訳ないのですが)

私の場合は"dataconfirm-modal"という別のgemを利用することで正常に動作するようになったので、そのまま放置してあります。結局、sass-railsjquery-datatables-railsの両方を利用しているので、また再発するかもしれないです。が、現状は問題ないので、しばらくこのままでいこうと思います・・・。