Android Rails服务器的JSON元素数组

Android Rails服务器的JSON元素数组,android,ruby-on-rails,json,curl,Android,Ruby On Rails,Json,Curl,我有一个Android应用程序,它通过HTTP消息与Rails 4服务器通信 我的服务器的数据库有一个包含3个字段的表室\u条目 名称:string macaddress:string 信号:int 现在我想将数据JSON从Android应用程序发送到服务器,但在大多数情况下,我希望一次发送多个room_条目 我正在使用curl测试服务器的REST API,当我尝试只使用一个room_条目发送POST HTTP消息时,一切正常,如下所示: curl -v -H "Accept: applicat

我有一个Android应用程序,它通过HTTP消息与Rails 4服务器通信

我的服务器的数据库有一个包含3个字段的表室\u条目

名称:string macaddress:string 信号:int 现在我想将数据JSON从Android应用程序发送到服务器,但在大多数情况下,我希望一次发送多个room_条目

我正在使用curl测试服务器的REST API,当我尝试只使用一个room_条目发送POST HTTP消息时,一切正常,如下所示:

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"room_entry": {"name": "room1", "macaddress": "someaddress", "signal": 10}}'  http://localhost:3000/room_entries
问题是,当我想使用数组一次发送多个room_条目时,它会添加一个空对象,数据库中的所有字段都为NULL

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"room_entry": [{"name": "room1", "macaddress": "someaddress1", "signal": 10}, {"name": "room2", "macaddress": "someaddress2", "signal": 40}]}'  http://localhost:3000/room_entries

通过阅读其他问题和答案,我认为这是我的控制器的许可证问题。关于如何传递一个特定属性的数组,有很多例子,但没有关于如何发送对象本身的数组,所以我有点迷茫。

如果您想通过一次调用插入多个记录,您可以同时做这两件事:创建一个特定于此的新方法或修改现有方法,并将其作为输入使用数组。 这是第二条:我相信你会喜欢的。 首先,您必须修改helper方法,因此采用room_entry_参数的通用框架实现并对其进行更改:

def custom_room_entry_params(par = {})
    par.permit(:name, :macaddress, :signal)
end

def room_entry_params #this is the default one, without parameters
    custom_room_entry_params(params.require(:room_entry))
end
在您的创建操作中:

def create
    if params[:room_entry].is_a? Array # In case you pass more than one room_entry
        params[:room_entry].each { |re| RoomEntry.create(custom_room_entry_params(re)) }
    else
        RoomEntry.create(room_entry_params) # The default behavior, only one room_entry
    end
end
现在,您应该能够同时执行以下两项操作:

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"room_entry": {"name": "room1", "macaddress": "someaddress", "signal": 10}}'  http://localhost:3000/room_entries


不幸的是,我现在无法测试它,因此如果您遇到任何错误,如果无法修复,请告诉我:

我们需要控制器的代码来帮助:/@iMacTia控制器的代码是使用脚手架创建的通用代码。问题很简单,通用脚手架控制器不能通过一次调用管理多个创建。你真的需要这个功能吗?我可以告诉你如何创建一个方法来实现这个功能,或者我们只是想知道为什么它不起作用?请记住,通常创建是一次完成一个项目。我需要这样做。我知道它不起作用,因为我的控制器是通用的,但我不知道怎么做。它起作用,只需在创建操作中更正房间入口参数即可。应该是房间入口参数。谢谢:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"room_entry": [{"name": "room1", "macaddress": "someaddress", "signal": 10}, {"name": "room2", "macaddress": "anotheraddress", "signal": 20}]}'  http://localhost:3000/room_entries