2014-04-26 11 views
8

Frage beantwortet meine Frage teilweise. Der Autor verwendet eine ähnliche JSON-Struktur.Rails 4 verschachtelte Array in verschachtelten Objekt in starken Parametern

Meine Frage: Wie verschachtelte Arrays in einem verschachtelten Objekt zulassen? Ich habe ein Contribution Modell mit has_manyFeatures. Ich versuche GeoJSON Polygone zu erstellen. Die coordinates bleibt leer

Dies ist die JSON Ich bin Senden

{ 
    "contribution": { 
    "features_attributes": [ 
     { 
     "geojson": { 
      "type": "Feature", 
      "properties": {}, 
      "geometry": { 
      "type": "Polygon", 
      "coordinates": [ 
       [ 
       [ 
        7.263336181640625, 
        52.07190953840937 
       ], 
       [ 
        7.263336181640625, 
        52.135173926548894 
       ], 
       [ 
        7.404785156249999, 
        52.135173926548894 
       ], 
       [ 
        7.404785156249999, 
        52.07190953840937 
       ], 
       [ 
        7.263336181640625, 
        52.07190953840937 
       ] 
       ] 
      ] 
      } 
     } 
     } 
    ], 
    "title": "324", 
    "description": "23" 
    } 
} 

Derzeit meine Erlaubnis Code wie folgt aussieht:

params.require(:contribution).permit(
    :title, 
    :description, 
    features_attributes: [ 
    { geojson: [ 
     :type, 
     { geometry: [ 
      :type, 
      #{ coordinates: [] } # this works for arrays like coordinates: [ 7.62, 51.96 ] 
      { coordinates: [[]] } 
      ] 
     } 
     ] 
    } 
    ] 
) 
+0

Warum verwenden Sie einen Hash für 'Geojson'? Sicher würden Sie 'features_attributes verwenden: [Geojson: [' anstelle von 'features_attributes: [{}' –

+0

Ich testete Ihren Vorschlag, es macht keinen Unterschied. Ich denke Ruby erkennt, dass 'Geojson' ein Hash ist. Die geschweiften Klammern sind nur für mich :) – ubergesundheit

+0

Huch! Ich gebe zu, dass die angenommene Antwort funktioniert. Aber es scheint wie ein Workaround. Weiß jemand, ob die Kern-API diese Funktionalität in irgendeiner Weise unterstützt? –

Antwort

6

ich es nun wie folgt gelöst. Bitte korrigieren Sie mich! :)

params.require(:contribution).permit(
    :title, 
    :description, 
    features_attributes: [ 
     { 
     geojson: [ 
      :type, 
      { geometry: [ 
       :type, 
       { coordinates: [] }, 
       coordinates: [] 
      ] 
      } 
     ] 
     } 
    ] 
).tap do |whitelisted| 
    whitelisted['features_attributes'].try(:each_index) do |i| 
     whitelisted['features_attributes'][i]['geojson']['geometry']['coordinates'] = params['contribution']['features_attributes'][i]['geojson']['geometry']['coordinates'] 
    end 
    end 
Verwandte Themen