How do I add JSON data in the child table against the parent table in Ruby on Rails? -
i have been struggling in ruby on rails.
i have 4 tables interlinked: a, b, c, , d. a parent b , b parent c , d.
i have records existing in table b , want add multiple entries against particular record, example "3", in 'c' , 'd' tables against id.
the data format is:
[{\"waypoint\":{\"latitude\":37.3645616666667,\"timestamp\":\"2012-10-16t09:58:50z\",\"background\":false,\"estimated_speed\":17.4189262390137,\"journey_id\":null,\"longitude\":-112.850676666667}},{\"waypoint\":{\"latitude\":37.3648733333333,\"timestamp\":\"2012-10-16t09:58:54z\",\"background\":false,\"estimated_speed\":17.076057434082,\"journey_id\":null,\"longitude\":-112.85077}},{\"waypoint\":{\"latitude\":37.3651116666667,\"timestamp\":\"2012-10-16t09:58:57z\",\"background\":false,\"estimated_speed\":15.4269437789917,\"journey_id\":null,\"longitude\":-112.850766666667}},{\"waypoint\":{\"latitude\":37.36547,\"timestamp\":\"2012-10-16t09:59:02z\",\"background\":false,\"estimated_speed\":17.1007328033447,\"journey_id\":null,\"longitude\":-112.85072}},{\"waypoint\":{\"latitude\":37.3658433333333,\"timestamp\":\"2012-10-16t09:59:11z\",\"background\":false,\"estimated_speed\":10.3052024841309,\"journey_id\":null,\"longitude\":-112.850738333333}}]" i data web service. see journey_id null, whereas want 3, want make entry against id.
how can save data in child table using id?
your json string isn't opened correctly in sample, it's missing leading '"'. fixing , moving on, here's json looks "prettified":
[ { "waypoint": { "latitude": 37.3645616666667, "timestamp": "2012-10-16t09:58:50z", "background": false, "estimated_speed": 17.4189262390137, "journey_id": null, "longitude": -112.850676666667 } }, { "waypoint": { "latitude": 37.3648733333333, "timestamp": "2012-10-16t09:58:54z", "background": false, "estimated_speed": 17.076057434082, "journey_id": null, "longitude": -112.85077 } }, { "waypoint": { "latitude": 37.3651116666667, "timestamp": "2012-10-16t09:58:57z", "background": false, "estimated_speed": 15.4269437789917, "journey_id": null, "longitude": -112.850766666667 } }, { "waypoint": { "latitude": 37.36547, "timestamp": "2012-10-16t09:59:02z", "background": false, "estimated_speed": 17.1007328033447, "journey_id": null, "longitude": -112.85072 } }, { "waypoint": { "latitude": 37.3658433333333, "timestamp": "2012-10-16t09:59:11z", "background": false, "estimated_speed": 10.3052024841309, "journey_id": null, "longitude": -112.850738333333 } } ] you have array of waypoint objects. parsing json ruby object:
obj = json["[{\"waypoint\":..."] # purposely truncated brevity returns array of hashes:
[{"waypoint"=> {"latitude"=>37.3645616666667, "timestamp"=>"2012-10-16t09:58:50z", "background"=>false, "estimated_speed"=>17.4189262390137, "journey_id"=>nil, "longitude"=>-112.850676666667}}, {"waypoint"=> {"latitude"=>37.3648733333333, "timestamp"=>"2012-10-16t09:58:54z", "background"=>false, "estimated_speed"=>17.076057434082, "journey_id"=>nil, "longitude"=>-112.85077}}, {"waypoint"=> {"latitude"=>37.3651116666667, "timestamp"=>"2012-10-16t09:58:57z", "background"=>false, "estimated_speed"=>15.4269437789917, "journey_id"=>nil, "longitude"=>-112.850766666667}}, {"waypoint"=> {"latitude"=>37.36547, "timestamp"=>"2012-10-16t09:59:02z", "background"=>false, "estimated_speed"=>17.1007328033447, "journey_id"=>nil, "longitude"=>-112.85072}}, {"waypoint"=> {"latitude"=>37.3658433333333, "timestamp"=>"2012-10-16t09:59:11z", "background"=>false, "estimated_speed"=>10.3052024841309, "journey_id"=>nil, "longitude"=>-112.850738333333}}] you can walk through array , access, or change, value journey_id:
row = 3 obj = obj.map{ |h| h['waypoint']['journey_id'] = row } obj.first looking @ first hash shows value changed, rest:
{ "waypoint" => { "latitude" => 37.3645616666667, "timestamp" => "2012-10-16t09:58:50z", "background" => false, "estimated_speed" => 17.4189262390137, "journey_id" => 3, "longitude" => -112.850676666667 } } at point, need recreate json string. can figure out reading the json documentation.
you modifying received string directly, don't want habit of directly modifying json strings because can inadvertently damage payload. it's better let parser give structure, modify that, let json recreate string.
how store database left exercise also.
Comments
Post a Comment