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

なぜか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 を省略しましょう。

以上です。

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた