我正在使用Grape Api为rails应用程序构建API。
我现在正在尝试的是这种形式:
这是输出:
{
"page_score_master": {
"issue_date": "2014-06-23"
},
"press_id": "1",
"print_date": "2014-06-23",
"product_id": 1,
"pull_id": 2,
"press_run_id": 1,
"total_section": 1,
"ssa": [
{
"ss": {
"section_name": "A"
},
"ss1": {
"section_name": "B"
}
}
],
"foreman_id": 1,
"pic_id": 1,
"score_sheet_master_id": 1,
"score_sheet_sections_attributes": {
"score_sheet_id": "1"
},
"route_info": {
"options": {
"description": "create score sheet",
"params": {
"page_score_master": {
"required": true,
"type": "Hash"
},
"page_score_master[issue_date]": {
"required": true,
"type": "String"
},
"print_date": {
"required": true,
"type": "String"
},
"total_section": {
"required": true,
"type": "Integer"
},
"ssa": {
"required": false,
"type": "Array"
},
"ssa[section_name]": {
"required": false,
"type": "String"
},
"ssa[total_pages]": {
"required": false,
"type": "Integer"
},
"ssa[color_pages]": {
"required": false,
"type": "String"
},
"ssa[score_sheet_id]": {
"required": false,
"type": "Integer"
}
}
}
我省略了json的某些部分以缩短它。
我需要的是拥有一个数组或ssa
,但到目前为止还无法实现。它只生成一个ssa
数组,只有一个对象。
在我的API控制器中,我有以下代码:
optional :ssa, type: Array do
requires :ss, type: Hash do
optional :section_name, type: String
optional :total_pages, type: Integer
optional :color_pages, type: String
optional :score_sheet_id, type: Integer
end
end
答案 0 :(得分:2)
我认为你有2个问题。
第一个在于你的表格声明。
在代码中,您说您有一个哈希数组(称为ssa
)(称为ss
)。
在您的表单中,您发送了一个名为ss1
的哈希,作为您的' ssa的一部分。阵列。 ss1
哈希将被忽略,因此您只有一个' s'你的数组中的元素。
如果您在表单中将ss1
重命名为ss
:
ssa[][ss][section_name] A
ssa[][ss][section_name] B
您将遇到第二个问题,它位于API控制器定义中:
你的控制器需要一个' ssa'数组只能有一个' s'哈希元素。因此,它将覆盖第一个[ss][section_name]
。
您要做的是将ssa
声明为数组并删除ss
组:
requires :ssa, type: Array do
optional :section_name, type: String
optional :total_pages, type: Integer
optional :color_pages, type: String
optional :score_sheet_id, type: Integer
end
这将需要一个哈希数组(ssa
)。您不需要声明ss
组,它已经预期一系列哈希值为section_name
,total_pages
等作为键。如果ssa
不是必需的参数,只需将其声明为optional
,就像在控制器中一样。
然后,您的表单应如下所示:
ssa[][section_name] ABC
opportunity[ssa][][total_pages] 3
ssa[][section_name] DEF
opportunity[ssa][][total_pages] 6
这将导致:
:ssa=>
[{:section_name=>"DEF",
:total_pages=>3,
:color_pages=>nil,
:score_sheet_id=>nil},
{:section_name=>"HGJK",
:total_pages=>6,
:color_pages=>nil,
:score_sheet_id=>nil}]