0

红宝石:2.0

导轨:4.0

我正在尝试从我的测验应用程序中提取答案选择。用户在此表单中选择 = 他们认为是正确答案的单选按钮:

<%= form_tag do |f| %>
    <%= hidden_field_tag :quiz_id, @quiz.id %>
    <% @quiz.questions.each do |question| %>
        <div class="question">
            <p><%= question.text %></p>
            <ul>
                <% question.answers.each do |answer| %>
                    <% if answer.text.length > 0 %>
                        <li>
                            <%= radio_button_tag "[questions][#{question.id}]selected_answer", answer.id %>
                            <%= answer.text %>
                        </li>
                    <% end %>
                <% end %>
            </ul>
        </div>
    <% end %>
    <%= submit_tag "Score this Quiz" %>
<% end %>

这些参数似乎可以通过 - 您可以使用 Spike 在日志中看到它们:

斯派克截图

但是,我不知道如何调用这些参数,这是我的控制器逻辑:

def score
   @answers = []
   @quiz = Quiz.find(params[:quiz_id])
   @quiz.questions.each do |question|
       @answers << params[:questions[question.id][:selected_answer]]
   end
end

但这会引发错误:no implicit conversion of Symbol into Integer

我如何去抓住selected_answer每个问题?

更新:

我已在评论中进行了建议的更改:

形式

<%= radio_button_tag "questions[#{question.id}][selected_answer]", answer.id %>

控制器

@quiz.questions.each do |question|
    @answers << params[:questions][question.id][:selected_answer]
end

这现在给了我这个错误:undefined method[]' for nil:NilClass` 在这一行:

@answers << params[:questions][question.id][:selected_answer]
4

2 回答 2

3

这看起来像一个错字。应该:

@answers << params[:questions]["#{question.id}"][:selected_answer]

注意括号的位置略有不同。

此外,我们可能需要将 thequestion.id转换为字符串,因为 params 哈希将具有字符串键(它是 a HashWithIndifferentAccess,因此您也可以使用符号,但我认为不是整数)。

于 2013-09-02T20:35:16.140 回答
0

您很可能正在寻找

<%= radio_button_tag "questions[#{question.id}][selected_answer]", answer.id %>

而你你的控制器

@answers << params[:questions][question.id][:selected_answer]

params您可以在日志中准确看到 的内容。看一下questions,您将能够看到 ruby​​ 代码中的确切结构。

于 2013-09-02T20:38:22.223 回答