葡萄api - 如何POST嵌套资源?
Grape api - How to POST nested resources?
所以,我正在使用 rails 4 和 Grape Api 开发这个系统。基本上,它汇总了有关在车辆上执行的维护服务的信息。我的模型定义如下:
# service.rb
class Service < ActiveRecord::Base
has_many :service_items
#service_item.rb
class ServiceItem < ActiveRecord::Base
belongs_to :service
我正在实施 API 以便外部应用程序可以 post 在我的系统上提供服务。每个服务都有一个关联的 1 个或多个服务项目的列表。我有一条类似的路线:example.com/api/v1/services for POST。我的问题是如何让它接受具有服务属性的 post 和嵌套在其中的 service_items 属性?
我读了 Grape 文档并开始了这样的事情:
#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 数据才能使其正常工作。
是否可以像这样在一个请求中完成所有这些,或者我是否必须将每个请求分开?例如一个 POST 接收服务,然后为每个 service_item 关联一系列 POST。在这种情况下推荐的最佳方法是什么?
params do
requires :service_items, type: Hash do
requires :description, type: Integer
end
end
requires 需要两个参数,你必须提供一个类型。在你的例子中是一个 Hash
所以,我正在使用 rails 4 和 Grape Api 开发这个系统。基本上,它汇总了有关在车辆上执行的维护服务的信息。我的模型定义如下:
# service.rb
class Service < ActiveRecord::Base
has_many :service_items
#service_item.rb
class ServiceItem < ActiveRecord::Base
belongs_to :service
我正在实施 API 以便外部应用程序可以 post 在我的系统上提供服务。每个服务都有一个关联的 1 个或多个服务项目的列表。我有一条类似的路线:example.com/api/v1/services for POST。我的问题是如何让它接受具有服务属性的 post 和嵌套在其中的 service_items 属性?
我读了 Grape 文档并开始了这样的事情:
#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 数据才能使其正常工作。 是否可以像这样在一个请求中完成所有这些,或者我是否必须将每个请求分开?例如一个 POST 接收服务,然后为每个 service_item 关联一系列 POST。在这种情况下推荐的最佳方法是什么?
params do
requires :service_items, type: Hash do
requires :description, type: Integer
end
end
requires 需要两个参数,你必须提供一个类型。在你的例子中是一个 Hash