1

AJAXによって送信されるコントローラーの新しいアクションの標準フォームがあります。ユーザーが送信ボタンをクリックするか、Enterキーを1回押すたびに、フォームはすぐに2回送信され、2つの同一のオブジェクトが作成されます。

モデルには検証がなく、それが適切な場合があります。

フォームビューは次のようになります。

<%= simple_form_for @contact, remote: true do |f| %>
    <table>
      <tr><td class="cell-right-align">First Name</td><td><%= f.text_field :first_name %></td></tr>
      <tr><td class="cell-right-align">Last Name</td><td><%= f.text_field :last_name %></td></tr>
      <tr><td></td><td><%= f.submit "Create Contact" %></td></tr>
  </table>
<% end %>

そのためのコントローラーアクション:

def create
  respond_to do |format|
    if @contact.save
      format.js { render 'search_result' }
    else
      format.js { render 'new' } 
    end
  end
end

createアクションのログは、同じ秒に2つのPOSTアクションがあり、どちらも同一であることを示しています。

ダブルPOSTを停止するにはどうすればよいですか?:disable_with => 'Saving...'送信ボタンに追加しようとしましたが、効果がありませんでした。

4

1 に答える 1

0

アセットパイプラインの問題である可能性があります。アプリを本番モードで実行し、アセットがプリコンパイルされていることを確認できますか?送信の処理に使用されたJavaScriptが重複していると思われます。したがって、2つの同一のイベントをフォーム送信にバインドします。

于 2013-02-03T05:38:04.153 に答える