ruby-葡萄 - 要求方法不能工作 3 层深
ruby-grape - requires method not working 3 levels deep
我现在正在使用 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_details
哈希所需的整个 :order_detail_custom_field
数组。尽管它是可选的。其他 :order_detail
没有 custom_fields 的哈希现在会收到错误消息,指出它们需要 :field_name
for :order_detail_custom_field
.
准确的错误是:
{
error: order[order_details][order_detail][order_detail_custom_fields][order_detail_custom_field][field_name] is missing
}
我能看到的唯一区别是错误似乎发生在 3 级深度而不是 2 级深度的参数上。有人对此有经验吗?还是我忽略了什么?
对于偶然发现这个问题的任何人,我已经提交了一个 github 问题,该问题被标记为 "bug?"。据我所知,根据@JGonzalesD,这个问题仍在发生。
我现在正在使用 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_details
哈希所需的整个 :order_detail_custom_field
数组。尽管它是可选的。其他 :order_detail
没有 custom_fields 的哈希现在会收到错误消息,指出它们需要 :field_name
for :order_detail_custom_field
.
准确的错误是:
{
error: order[order_details][order_detail][order_detail_custom_fields][order_detail_custom_field][field_name] is missing
}
我能看到的唯一区别是错误似乎发生在 3 级深度而不是 2 级深度的参数上。有人对此有经验吗?还是我忽略了什么?
对于偶然发现这个问题的任何人,我已经提交了一个 github 问题,该问题被标记为 "bug?"。据我所知,根据@JGonzalesD,这个问题仍在发生。