Ruby on rails Rails:使用JSON数组接收POST
我目前正在使用一个控制器一次接收一个json对象的POST。我想让它变成接收整个阵列。如何修改控制器 当前控制器Ruby on rails Rails:使用JSON数组接收POST,ruby-on-rails,arrays,json,post,Ruby On Rails,Arrays,Json,Post,我目前正在使用一个控制器一次接收一个json对象的POST。我想让它变成接收整个阵列。如何修改控制器 当前控制器 def create respond_to do |format| @targetrecord = TargetRecord.new(targetrecord_params) @targetrecord.save if @targetrecord.save format.json{ render :json => @targetrecord.
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":"",.....}
我想以数组的形式发送多个集合,就像
"targetrecord":[
{"id":"1","name":"",.....},
{"id":"2","name":"",.....},
....]
我如何让我的控制器知道她需要逐个提取和创建?非常感谢 如果您正在发布一个数组,那么当控制器操作处理该数组时,该数组将只是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
def创建
回应待办事项|格式|
@targetrecords=[]
保存成功=真
参数[:targetrecord]。每个do |记录|
tr=TargetRecord.new(TargetRecord_参数(记录))
除非tr.save,否则save\u successed=false
targetrecords@targetrecord.to_json,状态:200}
其他的
format.json{render json:@targetrecord.errors,状态:404}
结束
结束
结束
结束
def targetrecord_参数(记录)
记录。要求(:targetrecord)。允许(:id,:uuid,:manor,:mac,:信标类型,:经度,:纬度,:地址,:findTime,:rssi,:finderID,:创建地点,:更新地点)
结束
如果创建失败,您希望它如何运行?只需显示错误或什么都不做都可以!服务器将完成发布工作!谢谢但我有几个问题。@targetrecords=[]在这里是什么意思?我们为什么要宣布呢?“您之前只处理了一个TargetRecord,但您需要处理它们的集合,对吗?因此,在本例中,我创建了一个包含TargetRecord对象数组的实例变量。这样您就可以处理对象集合,而不仅仅是一个。因此@targetrecords=[]
将实例变量声明为数组,并且我尝试了它,但出现了一些错误。它表示“缺少参数或值为空:targetrecord”,并在记录处停止。require(:targetrecord)。允许(:id,.
对-正如我上面提到的,这不是经过测试的代码。我不知道您发布的参数是什么,所以我不知道如何构建一个确切的示例。您需要对其进行调整,以匹配控制器操作接收的任何参数。若要调试此代码,请在该点检查您的参数代码失败的地方。您可以通过使用pry或byebug之类的调试器,或者通过使用puts并在代码失败的地方查看参数来做到这一点。例如,当代码命中targetrecord_params方法时,您需要检查“record”值是什么,并相应地修改允许的属性。可能是您只需要一个id、uuid、manor等的数组值。在这种情况下,您将省略require(:targetrecord)
语句,因为您不需要名为“targetrecord”的参数!请记住,targetrecord\u参数的目的只是将期望的模型属性列入白名单。