ルビー: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
for eachの質問を取得するにはどうすればよいですか?
アップデート:
コメントで推奨されている変更を加えました。
形
<%= 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]