概要
本来関係ないはずなんだけど、元々のviewの書き方によってハマる例です。
今回は、<table>の中の<tr>の外に、<form>を書いてたのがいけなかったです。
現象
諸事情により、今まで tubolinks 使ってなかった Railsプロジェクトに turbolinksを導入。
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks // <-追加
//= require select2 // <-追加
//= require turbolinks // <-追加
//= require_tree .
ajaxで動いてるところはサクッと動いたのに、なぜか、f.submit のボタンが動かなくなる。
ボタン押しても、リクエストどころか、clickイベントも発火してない模様。
そして、同じページをリロードすると改善する(普通にボタンが動作する)。
原因
関係あるのは link_to だけなハズなのに??? と理不尽に感じつつもいろいろ試し。
↓こちらで、invalid HTML の例が出ていたので気づけました。
<table>
<%= form_for(@some_models) do |f| %>
(中略)
<% end %>
</table>
こういう書き方だと、こんな風にレンダーされてました。
<table class="ta1">
<form accept-charset="UTF-8" action="/some_models/xxxxxxxxxx" class="edit_some_model" id="edit_some_model_xxxxxxxxxx" method="post"></form>
<tbody>
(中略)
</tbody>
</table>
<tbody> の外で、<form> が閉じちゃってますので、<tbody><tr><td> の中に書いた <input type="submit"> は効かなったというワケです。
解決
<table> の外に <form> をもってくることで、解決しました。
<%= form_for(@titles) do |f| %>
<table>
(中略)
</table>
<% end %>