提交课程名单。一次添加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">
我们可以在这样的单独数组中返回多个学生:
<input type="text" name="students[first][]">
<input type="text" name="students[last][]">
<input type="text" name="students[age][]">
返回第一,数组和年龄的数组
students["first"] = [array of first names]
students["last"] = [array of last names]
students["age"] = [array of ages]
理论上,我们可以通过访问相同的索引来获取学生的所有信息(对每个数组说“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。
答案 0 :(得分:16)
[]
之后将空括号(students
)添加到输入名称。摆弄Rack::Utils.parse_nested_query似乎你可以得到你想要的有效载荷:
<!-- 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
)。这告诉Rack您希望students
参数为数组。遇到的后续参数(具有相同名称)将启动一个新元素。
POST /myroute?students[][first]=foo&students[][last]=bar&students[][age]=21&students[][first]=baz&students[][last]=qux&students[][age]=19
获取解析如下:
{"students" => [
{
"first" => "foo",
"last" => "bar",
"age" => "21"
},
{
"first" => "baz",
"last" => "qux",
"age" => "19"
}
]}
进一步阅读:http://codefol.io/posts/How-Does-Rack-Parse-Query-Params-With-parse-nested-query
答案 1 :(得分:6)
我知道问题已经过时了,但我想补充一下我的经验 也是为了未来的读者。
对于那些想要在PHP环境中处理数据的人, @ messanjah的方法不起作用,
解析数据的方法(如内置serializeArray
或serialize
)也未按预期解析。
这是我到目前为止所尝试的......
students[name]
students[][name]
- 非常奇怪,因为它意味着自动索引数组 students[name][]
它们都没有用,但这个students[<hardcoded-index>][name]
适用于 PHP ,
我知道虽然问题是反对这种方法,但它 对于将在不久的将来降落的PHP用户非常有用 因为提问者需要Ruby On Rails。
您选择对代码进行硬编码的方法取决于您,您可以使用 javascript 来使用更干净的方法,也可以手动硬编码 e最初是在你的表单元素中。
干杯