我遇到了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方法。
这是一个截屏:
如果有人可以帮助我,我将非常感激。
答案 0 :(得分:3)
根据您要发送的内容,您需要更改Grape限制,因为destinations
是Array
,而不是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'
希望这能回答你的问题。如果这是您正在寻找的,请告诉我。