私の Rails アプリケーションには、1 つのページに複数のフォームが含まれており、それらはすべて同じコントローラー (および実際には同じ関連付け) に関連しています。jQueryを使用してAJAXを介してすべてのフォームを一度に送信する送信ボタンが1つあります。問題は、一部の更新のみが実際にデータベースに反映されていることです。それらはすべて同じロジックと同じ方法を使用し、一度に 1 つずつ、データは正常に保持されます。しかし、すべてが一度に送信されるため、実際にデータベースに保持されるのはデータの約半分だけです。
Javascript は次のようになります。
$(document).on('click', '.submit', function(event){
$('form').submit();
});
そのため、ワンクリックですべてのフォームを AJAX 経由で送信できます。(図は約10形態)
Rails コントローラーは次のようになります (簡略化)。
#prepare the JSON data
adapter = DataMapper.repository(:default).adapter
adapter.execute("UPDATE person SET facets=? WHERE id=?", JSON.generate(facets), id)
render :text => 'OK'
この問題には、複数のプロセスが同時にメソッドにアクセスしようとしていて、古いデータでフィールドを更新しようとしていることが関係している可能性があると思います。すべての要求に対して「OK」という応答が返されますが、結果の約半分しか有効になりません。
助言がありますか?ありがとう!
編集:
誰かがこの同じ問題を抱えている場合に備えて、更新として。async を false に設定して、jQuery の問題を修正しました。これにより、ブラウザーが送信するのに少し時間がかかり、送信が完了するまで他の JavaScript イベントが保留される可能性がありますが、リクエストが互いに干渉することはありません。