2015-10-06 1 views
1

Je suis en train de construire une API en utilisant maintenant Grape and Rails. Un point de terminaison prend des requêtes POST pour les commandes. L'architecture est la suivante: An Order has_many OrderDetails. OrderDetails has_many OrderDetailCustomFields. En tant que tel, je m'attendrais à ce que les objets JSON de requête POST aient des valeurs imbriquées à trois niveaux de profondeur. Mon code se présente comme suit pour mon point de terminaison de commandes: (nu à l'esprit que je me suis débarrassé de la plupart des autres domaines, donc ceux qui me aide peut regarder juste l'imbrication des exigences de paramètres)ruby-grape - nécessite la méthode ne fonctionne pas 3 niveaux de profondeur

params do 
    requires :order, :type => Hash do 
     requires :order_details, :type => Array do 
      requires :order_detail, :type => Hash do 
       requires :cost, type: Integer#, desc: 
       requires :quantity_ordered, type: Integer#, desc: 
       requires :item_id, type: Integer#, desc: 
       optional :order_detail_custom_fields, :type => Array do 
        optional :order_detail_custom_field, :type => Hash do 
         requires :field_name, type: String#, desc: 
         optional :field_value, type: String#, desc: 
        end 
       end 
      end 
     end 
    end 
end 

J'ai d'autres points de terminaison qui ont des tableaux facultatifs et des hachages facultatifs. Si les champs imbriqués dans ces tableaux ou hachages facultatifs sont requis, Grape ne lancera généralement une erreur que si le paramètre parent existe dans la requête.

Cependant dans le cas de :order_detail_custom_field ce n'est pas le cas. Dès que je passe de 2 profonds niveaux de paramètres à 3 profonds niveaux de paramètres, Grape aboie sur moi et semble faire l'ensemble :order_detail_custom_field requis pour tous les :order_details Hashes. Même si c'est optionnel. D'autres hachages :order_detail qui n'ont pas de champs personnalisés ont maintenant des erreurs indiquant qu'ils ont besoin de :field_name pour :order_detail_custom_field.

L'erreur exacte est:

{ 
error: order[order_details][order_detail][order_detail_custom_fields][order_detail_custom_field][field_name] is missing 
} 

La seule différence que je vois est que les erreurs semblent se produire à des paramètres 3 niveaux de profondeur plutôt que 2 niveaux de profondeur. Est-ce que quelqu'un a de l'expérience avec ça? Ou suis-je en train de négliger quelque chose?

+1

Pour ceux qui tombent sur cette question, j'ai soumis un problème de github qui a été marqué comme "bug"? . Je vais mettre à jour comme j'ai plus d'informations. – James

+0

Ce problème se produit toujours. – juliangonzalez

Répondre

1

Pour quiconque trébuche sur cette question, j'ai soumis un problème de github qui a été marqué comme "bug?". Autant que je sache, cette question est encore en cours, selon @JonGonzalesD.