无法从表单发送数组 - Rails

时间:2014-12-11 18:03:57

标签: ruby-on-rails json

好吧,我现在已经挣扎了一段时间,我不知道自己做错了什么。我知道这已被问过几次,但其他问题的答案对我的情况并不是很有效。我试图将特定字段作为数组发送到rails无济于事。

生成的html看起来像这样

<input class="form-control" id="groups_header_0_version_number_value" name="groups[header][0][version][number][value]" placeholder="value" type="text">
<input class="form-control" id="groups_header_0_version_creator_value" name="groups[header][0][version][creator][value]" placeholder="value" type="text">

<input class="form-control" id="groups_header_1_version_number_value" name="groups[header][1][version][number][value]" placeholder="value" type="text">
<input class="form-control" id="groups_header_1_version_creator_value" name="groups[header][1][version][creator][value]" placeholder="value" type="text">

我想将header作为数组发送到rails服务器。当我在控制器中将params[:group]渲染为json时,我得到了

{  
  "header":{  
    "0":{  
      "version":{  
        "number":{  
          "operator":"\u003c=",
          "value":"34"
        },
        "creator":{  
          "operator":"=",
          "value":"joseph"
        }
      }
    },
    "1":{  
      "version":{  
        "number":{  
          "operator":"\u003c",
          "value":"87"
        },
        "creator":{  
          "operator":"=",
          "value":"john"
        }
      }
    }
  }
}

我真正想要的是一个json结构header作为数组,如

{  
  "header":[  
    {  
      "0":{  
        "version":{  
          "number":{  
            "operator":"\u003c=",
            "value":"34"
          },
          "creator":{  
            "operator":"=",
            "value":"joseph"
          }
        }
      },
      "1":{  
        "version":{  
          "number":{  
            "operator":"\u003c",
            "value":"87"
          },
          "creator":{  
            "operator":"=",
            "value":"john"
          }
        }
      }
    }
  ]
}

如何正确命名输入框以获取上述发送的参数?感谢

1 个答案:

答案 0 :(得分:1)

您将要将您的名称属性更改为:

<input ... name="groups[header][][0][version][number][value]" ... >
<input ... name="groups[header][][0][version][creator][value]" ... >

<input ... name="groups[header][][1][version][number][value]" ... >
<input ... name="groups[header][][1][version][creator][value]" ... >

请注意[]

之后的额外[header]

这会产生参数

"groups"=>{"header"=>
   [
     {
       "0"=>{"version"=>{"number"=>{"value"=>""}, "creator"=>{"value"=>""}}}, 
       "1"=>{"version"=>{"number"=>{"value"=>""}, "creator"=>{"value"=>""}}}
     }
   ]
}

似乎是你想要的。