2014-04-26 30 views
8

This pytanie odpowiedziało na moje pytanie częściowo. Autor używa podobnej struktury json ..Szyny 4 Zagnieżdżone macierze w obiekcie zagnieżdżonym o silnych parametrach

Moje pytanie: Jak zezwolić na zagnieżdżone tablice w zagnieżdżonym obiekcie? Mam model Contribution z has_manyFeatures. Próbuję utworzyć wielokąty GeoJSON. W coordinates pozostaje puste

Jest to JSON przesyłam

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

Obecnie mój kod pozwolenie wygląda następująco:

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

Dlaczego używasz hasha dla 'geojson'? Z pewnością użyłbyś 'features_attributes: [geojson: [zamiast zamiast" features_attributes: [{}} –

+0

Przetestowałem twoją sugestię, to nie ma znaczenia. Myślę, że ruby ​​rozpoznaje, że 'geojson' jest haszyszem. Kręcone szelki są właśnie dla mnie :) – ubergesundheit

+0

Yikes! Przyznaję, że zaakceptowana odpowiedź działa. Jednak wydaje się, że to obejście. Czy ktoś wie, czy podstawowe API obsługuje tę funkcję w jakikolwiek sposób? –

Odpowiedz

6

Rozwiązałem go teraz tak. Proszę mnie poprawić! :)

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