【发布时间】:2014-03-30 20:38:47
【问题描述】:
在表单中,我希望用户在一次提交中添加一个或多个答案。为了实现这一点,我有一个包含散列数组的参数散列。一个示例如下所示:
screen[question][unique_answer][][text]
screen[question][unique_answer][][next_screen]
预期的哈希应该是这样的:
{
...
"unique_answer" => [ { "text"=>"positive answer", "next_screen"=>"no_link" }, { "text" => "negative answer", "next_screen"=>"5" } ]
...
}
答案是一个包含文本输入和一些无线电输入的字段集。用户可以添加一个新的答案;这是通过 javascript 完成的(它复制字段集,更改 id 以使它们不会发生冲突并将其添加到 DOM)。
我之前已经成功使用过这种技术几次,它只包含文本输入,但是现在,当包含单选按钮时,浏览器会将所有单选按钮视为同一组,并且只允许检查一个槽全部答案。
此外,提交的参数仅在第一个数组对象上包含键“next_screen”。它看起来像这样:
{
...
"unique_answer" => [ { "text"=>"positive answer", "next_screen"=>"no_link" }, { "text" => "negative answer" } ]
...
}
html 表单的摘录如下:
<fieldset class="answer">
<ol>
<li id="screen_question_unique_answer_answer_text_input" class="unique-answer--answer string input required stringish">
<label for="screen_question_unique_answer_answer_text" class=" label">Answer text</label>
<input type="text" name="screen[question][unique_answer][][text]" id="screen_question_unique_answer_answer_text">
</li>
<li id="screen_question_unique_answer__next_screen_input" class="unique-answer--answer next_screen_picker radio input required">
<fieldset class="choices">
<legend class="label">
<label>Next Screen</label>
</legend>
<ol class="choices-group">
<li class="choice">
<label for="screen_question_unique_answer__next_screen_5">
<input type="radio" value="5" name="screen[question][unique_answer][][next_screen]" id="screen_question_unique_answer__next_screen_5">Blanditiis necessitatibus aliquam recusandae doloremque suscipit.
</label>
</li>
<li class="choice">
<label for="screen_question_unique_answer__next_screen_no_link">
<input type="radio" value="no_link" name="screen[question][unique_answer][][next_screen]" id="screen_question_unique_answer__next_screen_no_link">Back to Inbox
</label>
</li>
</ol>
</fieldset>
</li>
</ol>
</fieldset>
<fieldset class="answer">
<ol>
<li id="screen_question_unique_answer_1_answer_text_input" class="unique-answer--answer string input required stringish">
<label for="screen_question_unique_answer_1_answer_text" class=" label">Answer text</label>
<input type="text" name="screen[question][unique_answer][][text]" id="screen_question_unique_answer_1_answer_text">
</li>
<li id="screen_question_unique_answer_1_next_screen_input" class="unique-answer--answer next_screen_picker radio input required">
<fieldset class="choices">
<legend class="label">
<label>Next Screen</label>
</legend>
<ol class="choices-group">
<li class="choice">
<label for="screen_question_unique_answer_1_next_screen_5">
<input type="radio" value="5" name="screen[question][unique_answer][][next_screen]" id="screen_question_unique_answer_1_next_screen_5">Blanditiis necessitatibus aliquam recusandae doloremque suscipit.
</label>
</li>
<li class="choice">
<label for="screen_question_unique_answer_1_next_screen_no_link">
<input type="radio" value="no_link" name="screen[question][unique_answer][][next_screen]" id="screen_question_unique_answer_1_next_screen_no_link">Back to Inbox
</label>
</li>
</ol>
</fieldset>
</li>
</ol>
</fieldset>
有人遇到过这个问题吗?任何关于如何解决这个问题的cmets?
【问题讨论】:
-
好吧,因为所有单选按钮都有相同的“名称”,所以从技术上讲,它们是一组。毕竟,这就是广播组的定义。为每个答案使用不同的名称,你应该很好。
-
我理解您的评论,并且肯定它会起作用,但我感兴趣的是使用嵌套参数哈希的 Rails 行为,这样我就有了 N 个答案的数组。进一步阅读link
-
是的。您可以使用问题的索引来增加命名,从而生成诸如“screen[question][unique_answer][1][next_screen]”之类的无线电名称,这将导致您的“unique_answer”数组在您的浏览器满意时变成哈希具有不同的单选按钮名称。
标签: html ruby-on-rails radio-button nested params