1

Javascript で動的に生成されたいくつかのパラメーターを含む配列があります。いくつかのフィールドに入力して送信を押した後、フォームフィールドからのデータと配列からのデータ、つまり名前、配列[0];名前、配列[1];名前、配列[2]などを含むDBに複数のレコードを生成したい.だから私は次のことをすることに決めました:私の見解では(私はsimpleformを使用しています)

<%= simple_form_for(@stop_time, :html => {:remote => true, :class => 'well form-horizontal'}) do |f| %>
<%= f.input :stop_id %>
<%= f.button :submit %>

およびスクリプト部分(今のところ固定値を使用しています):

<script type="text/javascript">
$('#new_stop_time').submit(function(){
  $.ajax({
    beforeSend: function(xhr) {
      xhr.setRequestHeader(
        'X-CSRF-Token', 
        $('meta[name="csrf-token"]').attr('content'))},
    url: "/stop_times.json",
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify([
      arrival_time:"04:40:00",
      created_at:"2013-04-20T20:37:30Z",
      departure_time:"04:40:00",
      drop_off_type:0,
      id:1881,
      pickup_type:0,
      shape_dist_traveled:null,
      stop_headsign:null,
      stop_id:84612,
      stop_sequence:1,
      trip_id:"ABCDE",
      updated_at:"2013-04-20T20:37:30Z"
    ]
    ]})
  });
});  

しかし、クロムデバッグでは、2つのPOSTリクエストが送信されているのがわかります(フォームからの/stoptimesと、コード422で応答を得た他の/stop_times.json)。

1 つの POST 要求だけであってはなりませんか? Javascript でフォームではなく POST を実行したい。複数のレコードを作成する他の (より明白な) 方法はありますか?

ありがとう、

ドミニク

ありがとう@UberNeet :)今では1つのレコードで動作します。コントローラーに渡され、正しいレコードが作成されます。配列全体を作成して JSON として渡すことはできますが、コントローラー側でそれを処理する方法がわかりません。いくつかのループが必要だと思いますが、params がどのように構築されているかわかりません。以下を追加しました:

@i = 0 
while @i< params.length-1 do
  @stop_time = StopTime.new(params[@i][:stop_time])
  @i +=1
end 
4

1 に答える 1

1

フォームを 2 回投稿しています。これは、フォームを:remote => trueカスタム AJAX 投稿としてマークし、追加しているためです。

フォームを としてマークすると:remote => true、Rails の目立たない JavaScript ライブラリが起動し、イベント ハンドラーがフォームに追加されます。(詳細 @ 「Rails で Javascript を操作する」[http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html] これは Rails 4 用であることに注意してください)

フォームを としてマークしない:remote => trueでください。また、ajax のカスタム関数内で、送信に対して必ず false を返すようにしてください。

$('#new_stop_time').submit(function () {
  $.ajax({ ... });
  return false;
});

false を返すと、通常のフォーム送信がキャンセルされます。

AJAX を使用して複数のレコードを作成する場合は、Ajax メソッドで項目の配列を渡す必要があり、コントローラー アクションもそのデータの処理をサポートする必要があります。Rails アクションを API と考えてください。

于 2013-07-09T15:07:21.383 に答える