【问题标题】:nested ruby params hash and radio buttons dont play along well嵌套的 ruby​​ 参数哈希和单选按钮不能很好地播放
【发布时间】: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


【解决方案1】:

好几次碰壁后,我最终遵循了 KappaNossi 的建议并为参数添加了一个索引。所以现在哈希看起来像这样

screen[question][unique_answer][1][next_screen]

尽管这听起来不像是一项工作,但所有其他表单字段都可以很好地使用上述技术,并且确实必须为此案例编写特定的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 2019-11-10
    • 2011-09-16
    相关资源
    最近更新 更多