红宝石葡萄 - 要求方法不能深入3级

时间:2015-10-06 23:12:59

标签: ruby-on-rails ruby api grape-api

我正在使用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_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级深度的参数上。有任何人对此有经验吗?或者我忽略了什么?

1 个答案:

答案 0 :(得分:1)

对于任何偶然发现此问题的人,我提交了一个github问题,该问题已被标记为“bug?”。据我所知,这个问题仍然按照@JGonzalesD发生。