2016-06-11 2 views
0

私は現在、一度に1つのjsonオブジェクトでPOSTを受け取るためにコントローラを使用しています。そして、配列全体を受け取るように変更したい。コントローラを変更するにはどうしたらいいですか?Rails:JSON配列でPOSTを受け取ります

電流コントローラ

def create 
    respond_to do |format| 

    @targetrecord = TargetRecord.new(targetrecord_params) 
    @targetrecord.save 

    if @targetrecord.save 
     format.json{ render :json => @targetrecord.to_json ,status: 200 } 
    else 
     format.json { render json: @targetrecord.errors, status: 404 } 
    end 

    end 
end 
end 

def targetrecord_params 

    params.require(:targetrecord).permit(:id, :uuid, :manor, :mac, :beacon_type, :longitude, :latitude, :address, :findTime, :rssi, :finderID, :created_at, :updated_at) 

end 

私は

"targetrecord": 

{"id":"","name":"",.....} 

今以下のようにPOSTを送信していると私は次のように配列として複数のセットを送りたい

"targetrecord":[ 

{"id":"1","name":"",.....}, 
{"id":"2","name":"",.....}, 
....] 

どのようにして私のコントローラーに、 1つずつ作成しますか?どうもありがとう!

+0

がどのように使用すると、1つの作成に失敗した場合、それが動作するようにしたいですか? –

+0

だけでエラーを表示するか、何もしないでください。サーバーは投稿作業を行います! –

答えて

1

アレイをポストしている場合、コントローラのアクションによって処理されると、配列は単にparamsオブジェクトの一部になります。したがって、配列をループして、TargetRecordオブジェクトの配列を作成できるはずです。一度変更を加えたら、その文脈で 'params'を見ることができないので、引数を受け入れるようにtargetrecord_paramsメソッドを変更する必要があります。また、すべてのレコードが正常に保存されたかどうかを追跡する方法を見つける必要があります。

私はこのコードをテストしていませんが、このようなものは、あなたが正しい方向に軌道に乗る必要があり、私は思う:

def create 
     respond_to do |format| 

     @targetrecords = [] 
     save_succeeded = true 
     params[:targetrecord].each do |record| 
      tr = TargetRecord.new(targetrecord_params(record)) 
      save_succeeded = false unless tr.save 
      targetrecords << tr 
     end 

      if save_succeeded 
       format.json{ render :json => @targetrecord.to_json ,status: 200 } 
      else 
       format.json { render json: @targetrecord.errors, status: 404 } 
      end 

     end 
    end 
    end 

    def targetrecord_params(record) 
     record.require(:targetrecord).permit(:id, :uuid, :manor, :mac, :beacon_type, :longitude, :latitude, :address, :findTime, :rssi, :finderID, :created_at, :updated_at) 
    end 
+0

ありがとう!しかし、私はいくつかの質問があります。 @targetrecords = []はここで何を意味しますか?なぜそれを発表する必要がありますか?そして、 "<<"は "targetrecords << tr"の中で何をしますか?再度、感謝します! –

+0

あなたが以前にやっていたことは、TargetRecordを1つだけ扱いましたが、それらのコレクションを処理する必要があります。この場合、私はTargetRecordオブジェクトの配列を含むインスタンス変数を作成しています。そうすれば、ただひとつではなく、あなたのコレクションを扱うことができます。したがって、 '@targetrecords = []'はインスタンス変数を配列として宣言し、 '<<'は各パラメータをArray内でループしながら各TargetRecordオブジェクトを配列に追加し、各パラメータ項目をRubyオブジェクトに変換します。 – hightempo

+0

私はそれを試して何かが間違っていた。それは "paramが見つからないか値が空です:targetrecord"とそれが 'record.require(:targetrecord).permit(:id、....' –

関連する問題