HTML表单:发布对象数组
提交班级花名册。一次增加3名学生。每个学生都有第一个、最后一个年龄 问题:我们如何让所有学生都进入一个数组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",
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]
学生[姓名][]
干杯我不知道烧瓶是什么,但可能不知道。这个答案是针对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"
}
]}