2016-06-11 90 views
0

我目前使用控制器一次接收带有一个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 

我发送POST如下现在

"targetrecord": 

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

而且我想给多套作为一个数组一样

"targetrecord":[ 

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

我怎么让我的控制器知道她需要提取和一个一个创建?非常感谢!

+0

你怎么想它的行为,如果一个无法创建? –

+0

只是简单地显示一个错误或什么都不做都可以!服务器将完成发布工作! –

回答

1

如果您正在POST数组,那么在由控制器操作处理时,该数组将仅仅是您的params对象的一部分。所以你应该能够遍历数组并创建一个TargetRecord对象的数组。你需要修改你的targetrecord_params方法来允许它接受一个参数,因为一旦你做了改变,你就不能只看这个上下文中的'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之前你在做什么,但你需要处理它们的集合,对吗?所以,在这种情况下,我创建了一个包含TargetRecord对象数组的实例变量。这样你就可以处理你的对象集合而不仅仅是一个。因此'@targetrecords = []'将实例变量声明为一个数组,并且在您循环参数中的数组并将每个参数项转换为Ruby对象时,将每个TargetRecord对象添加到数组中。 – hightempo

+0

我试过了,出了点问题。它说“参数丢失或值是空的:targetrecord”,它停在'record.require(:targetrecord).permit(:id,....' –