ruby-葡萄 - 要求方法不能工作 3 层深

ruby-grape - requires method not working 3 levels deep

我现在正在使用 Grape 和 Rails 构建一个 API。一个端点接受 POST 个订单请求。架构如下: 一个Order has_many OrderDetailsOrderDetails 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,这个问题仍在发生。