昔作ったアンケートアプリで、似たような実装をした事があります。
だいぶん泥臭い実装ですが、
ランダムに生成される問題と回答をセットで取得するにはこの方法しか思いつきませんでした。
まあ、パラメータのキーに文字列を利用できる事、
パラメータのキーに[]をつける事で配列を入れられる事、
パラメータのキーに"キー名[副キー名]"を使う事でハッシュに出来る事さえ知っていれば、
後は煮るなり焼くなり、好きなようにパラメータセットを作れるので、
もっと良い方法があるかもしれません。
Ruby
1# model/quiz
2 attr_accessor :question, :right_answer
3
4 def right_answer?(reply)
5 return self.right_answer == reply
6 end
7
8# test_controller
9 def test
10 @quizzes = Quiz.all.sample(5)
11 end
12
13 def mark
14 quizzes = Quiz.find(params[:tests])
15 @answers = []
16 quizzes.each do |q|
17 answers << {quiz: q, right: q.right_answer?(params["quiz#{q.id}"])}
18 end
19 end
20
21# test.html.erb
22<%= form_tag test_mark_path do %>
23 <% @quizzes.each do |quiz| %>
24 <%= quiz.question %>
25 <%= hidden_field_tag "quiz[]", quiz.id %>
26 <%= text_field_tag "quiz#{quiz.id}" %>
27 <% end %>
28 <%= submit_tag "回答" %>
29<% end %>
30
31# submitされた際、パラメータは以下のようになる。
32# @quizzesのidが1,5,8,14,20の場合
33
34# params => {:quizzes =>[1,5,8,14,20], "quiz1"=>'quiz1のフォーム入力', "quiz5"=>'quiz5のフォーム入力', "quiz8"=>'quiz8のフォーム入力', "quiz14"=>'quiz14のフォーム入力', "quiz20"=>'quiz20のフォーム入力' }
35
36# mark.html.erb
37<% @answers.each do |answer| %>
38 <%= answer[:quiz].question %>
39 <%= answer[:right] ? "正解" : "不正解" %>
40 <%= answer[:quiz].right_answer %>
41<% end %>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。