2014-04-26 3 views
8

This la domanda ha risposto parzialmente alla mia domanda. L'autore utilizza una struttura JSON simile.Rails 4 Matrice nidificata in oggetto nidificato con parametri forti

La mia domanda: come consentire gli array annidati in un oggetto nidificato? Ho un modello Contribution con has_manyFeatures. Sto cercando di creare poligoni GeoJSON. I coordinates soggiorni svuotano

Questo è il JSON io mando

{ 
    "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" 
    } 
} 

Attualmente il mio codice permesso assomiglia a questo:

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

Perché stai utilizzando un hash per 'geojson'? Sicuramente useresti 'features_attributes: [geojson: [' invece di 'features_attributes: [{}' –

+0

Ho testato il tuo suggerimento, non fa differenza. Penso che Ruby riconosca che 'geojson' è un hash. Le parentesi graffe sono solo per me :) – ubergesundheit

+0

Yikes! Concedo che la risposta accettata funzioni. Eppure sembra una soluzione. Qualcuno sa se l'API di base supporta questa funzionalità in alcun modo? –

risposta

6

ho risolto ora come questo. Per favore correggimi! :)

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