如何将Hash传递给Grape API方法?

时间:2014-10-30 01:22:59

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

我遇到了Grape gem和参数验证问题。 这背后的想法是通过API服务使用嵌套属性创建复杂实体。

我有一个创建旅行的方法,旅行有很多目的地,我想使用哈希传递目的地(使用accepts_nested_attributes_for助手)。

我对参数有这个葡萄限制:

requires :destinations, type: Hash

我试图发送这样的内容:

{ destinations => [ 
  { destination: { name => 'dest1'} },
  { destination: { name => 'dest2'} }, 
  { destination: { name => 'dest3'} }
]}

为了在方法内部构建类似下面的结构并创建行程:

{ trip: {
  name: 'Trip1', destinations_attributes: [
    { name: 'dest1' },
    { name: 'dest2' },
    { name: 'dest3' }
  ]
}}

我使用POSTMAN chrome扩展来调用API方法。

这是一个截屏:enter image description here

如果有人可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:3)

根据您要发送的内容,您需要更改Grape限制,因为destinationsArray,而不是Hash

requires :destinations, type: Array

发送请求时不需要“目标”哈希:

{ destinations => [ 
  { name => 'dest1', other_attribute: 'value', etc... },
  { name => 'dest2', other_attribute: 'value', etc... }, 
  { name => 'dest3', other_attribute: 'value', etc... }
]}

这会创建一个哈希数组。

要通过POSTMAN发送,您需要修改发送的destinations个参数,并在POSTMAN中添加多行。类似的东西:

destinations[][name]                'dest1'
destinations[][other_attribute]     'value1'
destinations[][name]                'dest2'
destinations[][other_attribute]     'value2'
destinations[][name]                'dest3'
destinations[][other_attribute]     'value3'

希望这能回答你的问题。如果这是您正在寻找的,请告诉我。