2014-11-06 65 views
0

我有一個Android應用程序,它通過HTTP消息與Rails 4服務器進行通信。JSON元素數組到Rails服務器

我的服務器的數據庫中有一個表room_entries有3場

  • 名稱:字符串
  • MACADDRESS:字符串
  • 信號:整數

現在我要發送的數據( JSON)從Android應用程序到服務器,但在大多數情況下,我想一次發送多個room_entry

我測試用curl服務器的REST API,它是確定,當我嘗試做一個發送HTTP POST消息只是一個room_entry,像這樣:

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_entry,使用數組時,它會在數據庫中添加一個空對象(所有字段爲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 

讀其他的問題和答案,我是來的想法,這是我的控制器許可證問題。在如何傳遞一個特定屬性的數組中有很多例子,而不是關於如何發送一個對象本身的數組,所以我有點失落。

+0

我們需要控制的代碼,以幫助在這裏:/ – iMacTia 2014-11-06 17:23:55

+0

@iMacTia控制器的代碼是通用腳本,由腳手架創建。 – 2014-11-06 17:29:08

+0

然後問題在於通用腳手架控制器不能用一次調用管理多個創建。你真的需要這個功能嗎(我可以告訴你如何創建一個這樣做的方法),或者你只是想知道爲什麼它不工作?請記住,通常創作一次完成一項。 – iMacTia 2014-11-06 17:39:40

回答

0

如果您想通過一次調用插入多條記錄,可以執行以下操作:爲此創建一個特定的新方法,或修改現有方法並使其與數組一起作爲輸入。 這是第二個:)我確定你會喜歡它。所有的 首先,你必須修改的輔助方法,所以採取的一般腳手架實施room_entry_params,並改變它:

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 

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 

可惜我現在不能測試,因此,如果您遇到任何錯誤只是讓我知道,如果你不能修復它:)

+0

它的工作原理,只需在創建操作中更正'room_entry_parameters'。它應該是'room_entry_params'。謝謝:) – 2014-11-07 13:50:07

+0

感謝您的更正,我編輯了答案:) – iMacTia 2014-11-07 14:28:29