Rails / Ajaxの送信で重複したデータが保存される場合

Shunsuke Sawada

なぜか2つのレコードが登録されてしまう時がある。
何かと思ったら…。

こんなのありますよね。

RailsでformデータをAjaxで送信する。
 ↓
レスポンスを受け取ってごにょごにょする。

coffee
1
2
3
4
5
6
7
8
$('form').on 'submit', (e) ->
  e.preventDefault()
  $.ajax({ url: $(this).attr('action'), data: {...} })
  .done((data) ->
    # Do something
  )

やってたらなぜかデータベースに同じデータが保存されてしまった。
まったく同じものがまったく同じ時刻で。

悩んだ結果、イージーなミスでした。
  

ビュー側

slim
1
2
3
= form_for research_item, url: your_path, remote: true do |f|
  = f.text_field :name
  ....

remote: true が原因でしたよっと。
Rails便利機能が勝手にリクエスト投げちゃうのです。
いつものくせでAjax ===> remote: true と書いてしまっていた…。

なので、JSですべてハンドリングする場合は js: true を省略しましょう。

以上です。

Shunsuke Sawada

おすすめの記事

Railsを4.2にバージョンアップしたら、Vagrantのローカル開発環境にアクセスできなくなった問題
Railsのバリデーションエラー後にレイアウトが崩れるとき
acts-as-taggable-on タグを表示させる順番を決めたい