我正在使用Grape和Rails构建API。一个端点接受订单的POST请求。架构如下:
一个Order has_many OrderDetails
。 OrderDetails has_many OrderDetailCustomFields
。
因此,我希望POST请求JSON对象将嵌套三层深度的值。 对于我的订单端点,我的代码如下所示: (记住我已经摆脱了大多数其他领域,所以那些帮助我的人只能看看参数要求的嵌套)
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
我有其他具有可选数组和可选哈希值的端点。如果这些可选数组或哈希中的嵌套字段是必需,如果请求中存在父参数,Grape通常只会抛出错误。
然而,在:order_detail_custom_field
的情况下并非如此。一旦我从2个参数级别深入到3个参数级别深处,Grape就会咆哮我,似乎要使所有:order_detail_custom_field
哈希所需的整个:order_details
数组。即使它是可选的。其他没有custom_fields的:order_detail
哈希现在会收到错误消息,指出:field_name
需要:order_detail_custom_field
。
确切的错误是:
{
error: order[order_details][order_detail][order_detail_custom_fields][order_detail_custom_field][field_name] is missing
}
我能看到的唯一区别是错误似乎发生在3级深度而非2级深度的参数上。有任何人对此有经验吗?或者我忽略了什么?
答案 0 :(得分:1)
对于任何偶然发现此问题的人,我提交了一个github问题,该问题已被标记为“bug?”。据我所知,这个问题仍然按照@JGonzalesD发生。