2015-08-28 106 views
1

所以,我有這個系統我正在使用rails 4和葡萄Api。基本上它彙總了關於在車輛上執行的維護服務的信息。我的模型是這樣定義的:Grape api - 如何發佈嵌套資源?

# service.rb 

class Service < ActiveRecord::Base 
    has_many :service_items 


#service_item.rb 

class ServiceItem < ActiveRecord::Base 
    belongs_to :service 

我在實現一個API,因此外部應用程序可以在我的系統上發佈服務。每個服務都有一個或多個關聯服務項目的列表。我有一個路由,如:example.com/api/v1/services for POST。我的問題是,如何讓它接受一個包含服務屬性和service_items屬性嵌套的帖子?

我讀葡萄文檔,開始是這樣的:

#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 

但是我不知道我怎麼能安裝後的數據爲這個工作。 是否可以像這樣在單個請求中完成所有這些操作,還是必須將每個請求分開?例如一個POST接收服務,然後爲每個關聯的service_item提供一系列POST。在這種情況下推薦的最佳方法是什麼?

回答

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

需要兩個參數,您必須提供一個類型。在你的情況下,哈希