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_answerfor 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]
4

2 に答える 2

3

これは単なるタイプミスのようです。次のようにする必要があります。

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

ブラケットの配置がわずかに異なることに注意してください。

question.idまた、 params ハッシュには文字列キーがあるため、 を文字列に変換する必要がある場合があります (これは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 に答える