View вытягивает все записи таблицы вместо конкретных записей идентификаторов, проблема с контроллером? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь создать простое приложение для викторин, у меня уже есть одна таблица для вопросов, а другая для ответов (у каждого ответа есть тег question_id для выбора вариантов множественного выбора для каждого вопроса).

Я перечислил все мои вопросы с несколькими вариантами ответов на одной странице, и я хочу, чтобы только ответы, соответствующие каждому вопросу, отображались под вопросом, однако каждый MCQ в настоящее время перечисляет полную таблицу ответов, а не только соответствующие ответы.

Я думаю, что это связано либо с моим представлением, либо с кодом контроллера, который вызывает такое поведение (когда я меняю идентификатор вопроса в моем контроллере только на один вопрос, 4 возможных ответа отображаются правильно, но когда я изменяю его на @questions = Question.all, тогда возвращается полная таблица ответов).

Или это может быть связано с неправильным использованием <% @question_answers.each do |question_answers| %>.

Код моего pages_controller.rb:

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

Мой файл просмотра на pages / challenge.html.erb:

<h1>Challenge</h1>

<% @questions.each do |question| %>
<div class="container">
    <p><%= question.question %></p>
    <form>
      <% @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 %>

Я хочу, чтобы только ответы, которые соответствуют каждому вопросу, отображались ниже вопроса, есть идеи, что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Вы ошиблись этим кодом:

<% @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 %>

В контроллере вы толькоneed:

@questions = Question.includes(:question_answers).all

includes(:question_answers) используется, чтобы избежать N + 1 запросов при загрузке ответов на каждый вопрос.

0 голосов
/ 11 мая 2019

Вы указали отношения между моделями 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 ответы на этот вопрос будут получены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...