HTML表单:发布对象数组

HTML表单:发布对象数组,html,arrays,forms,ruby-on-rails-4,Html,Arrays,Forms,Ruby On Rails 4,提交班级花名册。一次增加3名学生。每个学生都有第一个、最后一个年龄 问题:我们如何让所有学生都进入一个数组 students[0] => Array ( ["first"] => "first name for 0", ["last"] => "last name for 0", ["age"] => "age for 0" ), students[1] => Array ( ["first"] => "first name for 1",

提交班级花名册。一次增加3名学生。每个学生都有第一个、最后一个年龄

问题:我们如何让所有学生都进入一个数组

students[0] => Array (
  ["first"] => "first name for 0",
  ["last"] => "last name for 0",
  ["age"] => "age for 0"
),
students[1] => Array (
  ["first"] => "first name for 1",
  ["last"] => "last name for 1",
  ["age"] => "age for 1"
), 
...  
详细信息
对于一名学生:

<input type="text" name="first">  
<input type="text" name="last">  
<input type="text" name="age">  
从理论上讲,我们可以通过访问相同的索引(每个数组称为“3”)获得学生的所有信息

我们不希望以编程方式在表单中添加索引。
不想要:

<input type="text" name="students[hardcoded_index][first]">  
<input type="text" name="students[hardcoded_index][last]">  
<input type="text" name="students[hardcoded_index][age]">  

如果出于任何原因,我们使用Rails作为视图,但可以使用表单帮助程序或HTML。

tl;dr:在输入名称的
学生
之后添加空括号(
[]
)。 摆弄它似乎可以得到您想要的有效载荷,如下所示:

<!-- first student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">

<!-- second student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">
{"students" => [
  {
    "first" => "foo",
     "last" => "bar",
      "age" => "21"
  },
  {
    "first" => "baz",
     "last" => "qux",
      "age" => "19"
  }
]}
进一步阅读:

我知道这个问题由来已久,但我想补充一下我的经验 也为未来的读者

对于那些希望在PHP环境中处理数据的人, @messanjah的方法行不通

解析数据的方法,如内置的
serializeArray
serialize
也没有按预期解析数据

这就是我到目前为止试过的

  • 学生[姓名]
  • students[][name]
    -非常奇怪,因为它是用来自动为数组编制索引的
  • 学生[姓名][]
他们两人都不管用,但这名学生[][姓名]为PHP工作

我知道虽然这个问题是反对这种方法的,但是它 这对不久将登陆这里的PHP用户很有用 因为asker需要Ruby On Rails

选择硬编码索引的方法取决于您,您可以使用javascript使用更干净的方法,也可以手动硬编码在表单元素中对索引进行初始硬编码


干杯

我不知道烧瓶是什么,但可能不知道。这个答案是针对RubyonRails的,我使用的是Rails4。这种方法使HTTP POST请求正确地包含了所有学生的信息(正如我从chrome网络检查器确认的那样)。但是在
controller.create
方法(使用binding.pry)中,当我看到
params
时,它显示一个学生数组,但其中只包含一个散列-只有最后一个学生的散列-前面的学生在params中丢失。我在这里做错了什么?对于那些使用Django&DRF的人来说,所需的格式首先是
students[0]
(无点、唯一、指定索引),正如我最后在这里发现的:这非常有趣。这是否意味着围绕这个特定任务的困难不是rails特有的东西,而是HTML的东西呢但我相信这个问题现在已经解决了,或者至少有一个比这个更好的解决办法:我希望如此,这对我来说有点困惑,但仍然是一个很大的帮助。如果你知道我有任何更新的技术,请分享链接
<!-- first student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">

<!-- second student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">
{"students" => [
  {
    "first" => "foo",
     "last" => "bar",
      "age" => "21"
  },
  {
    "first" => "baz",
     "last" => "qux",
      "age" => "19"
  }
]}