我正在尝试构建一个简单的测验应用程序,我已经有一个表格用于回答问题,而另一张表格则用于回答问题(答案每个都有一个question_id标签,以提取每个问题的多项选择选项)。
我在一页上列出了所有多项选择题,我只希望将与每个问题对应的答案显示在该问题的下方,但是每个MCQ当前正在列出完整的答案表,而不仅仅是匹配的答案。
我认为这与导致此行为的视图或控制器代码有关(当我将控制器中的问题ID更改为单个问题时,会正确显示4种可能的答案,但是当我将其更改为{ {1}},然后返回完整答案表)。
或者可能与错误使用@questions = Question.all
有关。
我的pages_controller.rb代码:
<% @question_answers.each do |question_answers| %>
我的视图文件位于pages / challenge.html.erb:
class PagesController < ApplicationController
def show
end
def home
end
def challenge
@questions = Question.all
@question_answers = QuestionAnswer.where(question_id: @questions.pluck(:id))
# @questions = Question.where(id: 3)
end
end
我只希望将与每个问题相对应的答案显示在问题下方,任何想法我在这里出错了吗?
答案 0 :(得分:0)
您是否已指定模型question
和answer
之间的关系。
如果是这样,请在视图中尝试给出
<% @questions.each do |question| %>
<div class="container">
<p><%= question.question %></p>
<form>
<% question.question_answers.each do |question_answers| %>
<input type="radio" name="gender" value=<%= question_answers.answer %>><%= question_answers.answer %><br>
<% end %>
<input type="submit" value="Submit">
</form>
</div>
<% end %>
当您给question.question_answers.each
时,与该问题相关的答案将被拉出。
答案 1 :(得分:0)
您输入的代码有误:
<% @question_answers.each do |question_answers| %>
<input type="radio" name="gender" value=<%= question_answers.answer %>><%= question_answers.answer %><br>
<% end %>
question_answers
是答案表中的所有记录,因为您已将其分配给QuestionAnswer.where(question_id: @questions.pluck(:id))
您应该仅查询属于答案的问题。假设您有两个模型并按以下方式建立关联:
class Question
has_many :question_answers
end
class QuestionAnswer
belongs_to :question
end
然后在您看来,您可以得到的问题属于这样的答案:
<% @questions.each do |question| %>
<div class="container">
...
<% question.question_answers.each do |question_answer| %>
<input type="radio" name="gender" value=<%= question_answer.answer %>><%= question_answer.answer %><br>
<%>
...
</div>
<% end %>
在控制器中,您只需要:
@questions = Question.includes(:question_answers).all
includes(:question_answers)
用于在为每个问题加载答案时避免N + 1个查询。