1

此问题与 RoR 测验应用程序有关。我希望显示测验的结果,显示正确答案以及用户的答案。

因此,在我看来,我需要遍历每个问题并显示问题答案以及用户的答案。但是,我正在努力弄清楚如何正确查询用户的答案。

要查询 user_answer,我需要 user_id = current_user.id 的 response_set,并且我需要在 question_id 循环遍历每个循环时传递它。但是,我坚持如何做到这一点。

我需要做什么才能在正确答案旁边的视图中显示 user_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

在response表中添加user_id,这样就不用查询response_set表了。在此之后,您可以在循环中执行类似的操作

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