如何调用嵌套在多维数组中的PARAM值?

时间:2013-09-02 20:30:05

标签: ruby-on-rails ruby

Ruby:2.0

Rails: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在日志中看到它们:

Spike Screenshot

但是,我无法弄清楚如何调用这些参数,这是我的控制器逻辑:

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 []'为nil:NilClass`在这一行:

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

您很可能正在寻找

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

你的控制器

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

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