2015-08-28 1 views
1

Donc, j'ai ce système Im travaillant sur l'utilisation des rails 4 et Grape Api. Fondamentalement, il regroupe des informations sur les services de maintenance exécutés sur les véhicules. Mes modèles sont définis comme suit:Grape api - Comment POSTER des ressources imbriquées?

# service.rb 

class Service < ActiveRecord::Base 
    has_many :service_items 


#service_item.rb 

class ServiceItem < ActiveRecord::Base 
    belongs_to :service 

Im mettre en œuvre une API afin que les applications externes peuvent poster des services sur mon système. Chaque service a une liste d'un ou plusieurs éléments de service associés. J'ai un itinéraire comme: example.com/api/v1/services pour POST. Ma question est comment puis-je faire cela pour accepter un poste avec les attributs de service, et les attributs service_items imbriqués avec lui?

Je lis docs et a commencé quelque chose comme ce raisin:

#service_providers_api.rb 

resource :services do 
    desc "Post a Service" 
    params do 
     #requires :category_id, type: Integer 
     requires :description, type: String 
     requires :plate, type: String 
     requires :mileage, type: Integer 
     requires :date, type: Date 
     optional :cost, type: BigDecimal 

     requires :service_items do 
     requires :description, type: Integer 

     end 
    end 

    post do 
     . 
     . 
     . 
    end 

end 

Mais je ne suis pas sûr de savoir comment je peux monter les données post pour que cela fonctionne. Est-il possible de faire tout cela dans une seule requête comme ça, ou dois-je séparer chaque requête? par exemple. un POST pour recevoir le service, puis une série de POST pour chaque service_item associé. Quelle est la meilleure approche recommandée dans ce scénario?

Répondre

4
params do 
    requires :service_items, type: Hash do 
    requires :description, type: Integer 
    end 
end 

nécessite deux paramètres, vous devez fournir un type. dans votre cas un Hash