1

この質問は、RoR クイズ アプリに関するものです。クイズの結果を表示して、正しい答えとユーザーの答えの両方を表示しようとしています。

したがって、私の見解では、各質問をループして、質問の回答とユーザーの回答を表示する必要があります。ただし、ユーザーの回答を正しくクエリする方法を見つけようとして苦労しています。

user_answer を照会するには、user_id = current_user.id である response_set が必要です。また、各ループをループする際に question_id を渡す必要があります。しかし、私はこれを達成する方法にこだわっています。

user_answer を correct_answer と一緒にビューに表示するにはどうすればよいですか?

私は3つのモデルを持っています:

Response_set
belongs_to :user
has_many :responses

Reponse
belongs_to :response_set
belongs_to :question

Question
has_many :responses

テーブル フィールド:

create_table :response_sets do |t|
  t.integer :user_id

create_table :responses do |t|
  t.integer :response_set_id
  t.integer :question_id
  t.integer :user_answer

create_table :questions do |t|
  t.integer :correct_answer

コントローラ

@questions = Question.all
@user = current_user.id

表示 (質問をループするだけで、ユーザーの回答は表示されません)

<% @questions.each do |question| %>
   <%= question.correct_answer %>
<% end %>
4

2 に答える 2

2

私のメンターは私のためにこれを解決してくれました。彼が提示した解決策は次のとおりです。

「ここでのより良いアプローチは、質問をループするのではなく、応答セットから応答を取得し、それをループすることだと思います。」

コントローラ:

 @response_set = Response_set.where("user_id = ?", @user).includes({:responses => :question}).last

意見:

 <% @response_set.responses.each do |response| %>
   <%= response.question.correct_answer %>
   <%= response.user_answer %>
 <% end %>
于 2012-05-15T13:16:40.923 に答える
0

応答テーブルに user_id を追加します。これにより、response_set テーブルを照会する必要がなくなります。この後、ループ内でこのようなことを行うことができます

 question.responses.where(:user_id => current_user.id).first.user_answer
于 2012-05-13T14:37:56.157 に答える