视图会拉出所有表记录,而不是特定的ID记录,控制器是否发生问题?

时间:2019-05-11 15:43:48

标签: ruby-on-rails

我正在尝试构建一个简单的测验应用程序,我已经有一个表格用于回答问题,而另一张表格则用于回答问题(答案每个都有一个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

我只希望将与每个问题相对应的答案显示在问题下方,任何想法我在这里出错了吗?

2 个答案:

答案 0 :(得分:0)

您是否已指定模型questionanswer之间的关系。 如果是这样,请在视图中尝试给出


<% @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个查询。