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在日志中看到它们:
但是,我无法弄清楚如何调用这些参数,这是我的控制器逻辑:
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]
答案 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代码中的确切结构。