Rails:使用JSON数组接收POST
我目前使用控制器一次接收带有一个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":"",.....},
....]
我怎么让我的控制器知道她需要提取和一个一个创建?非常感谢!
如果您正在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
谢谢!但我有几个问题。 @targetrecords = []是什么意思?为什么我们需要宣布它? “targetrecords
在处理一个TargetRecord之前你在做什么,但你需要处理它们的集合,对吗?所以,在这种情况下,我创建了一个包含TargetRecord对象数组的实例变量。这样你就可以处理你的对象集合而不仅仅是一个。因此'@targetrecords = []'将实例变量声明为一个数组,并且在您循环参数中的数组并将每个参数项转换为Ruby对象时,将每个TargetRecord对象添加到数组中。 – hightempo
我试过了,出了点问题。它说“参数丢失或值是空的:targetrecord”,它停在'record.require(:targetrecord).permit(:id,....' –
你怎么想它的行为,如果一个无法创建? –
只是简单地显示一个错误或什么都不做都可以!服务器将完成发布工作! –