概要
本来関係ないはずなんだけど、元々のviewの書き方によってハマる例です。
今回は、<table>
の中の<tr>
の外に、<form>
を書いてたのがいけなかったです。
現象
諸事情により、今まで tubolinks 使ってなかった Railsプロジェクトに turbolinksを導入。
application.js
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks // <-追加
//= require select2 // <-追加
//= require turbolinks // <-追加
//= require_tree .
ajaxで動いてるところはサクッと動いたのに、なぜか、f.submit
のボタンが動かなくなる。
ボタン押しても、リクエストどころか、clickイベントも発火してない模様。
そして、同じページをリロードすると改善する(普通にボタンが動作する)。
原因
関係あるのは link_to
だけなハズなのに??? と理不尽に感じつつもいろいろ試し。
↓こちらで、invalid HTML の例が出ていたので気づけました。
app/views/some_models/_form.html.erb
<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 %>