我正在使用葡萄和Rails建立一个API。一个端点接收对订单的POST请求。该体系结构如下: 一个Order has_many OrderDetails
。 OrderDetails has_many OrderDetailCustomFields
。红宝石葡萄 - 要求方法不工作3级深
因此,我期望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
我有其他有可选数组和可选哈希的端点。如果这些可选阵列或散列中的嵌套字段为要求,则如果请求中存在父参数,葡萄通常只会抛出一个错误。
但是在:order_detail_custom_field
的情况下并非如此。一旦我从2个参数级别深入到3个参数级别深度,葡萄就会吠叫我,并且似乎使所有:order_details
哈希都需要整个:order_detail_custom_field
阵列。即使它是可选的。其他:order_detail
没有custom_fields的散列现在出现错误,说明它们需要: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层深的参数。有人对此有经验吗?或者我忽略了什么?
对于任何人在这个问题上磕磕绊绊,我提交了一个标有“bug?”的github问题。 。我会更新,因为我有更多的信息。 – James
此问题仍在发生。 – juliangonzalez