Rails Survey - Как показать номер текущего вопроса из общего числа? - PullRequest
0 голосов
/ 04 марта 2020

Я новичок в рельсах и работаю над созданием инструмента опроса. Вот как структурированы мои модели:

class Study < ApplicationRecord
  has_many :questions, dependent: :destroy
  validates :study_name, presence: true, length: { minimum: 5, maximum: 100 }
end


class Question < ApplicationRecord
  belongs_to :study
  has_many :answers, dependent: :destroy
  validates :question, presence: true, length: { minimum: 5, maximum: 100 }
  def next_question
    study.questions.where('id > ?', id).first
  end
end


class Answer < ApplicationRecord
  belongs_to :question
  belongs_to :participant
  validates :text, presence: true, length: { minimum: 5, maximum: 100 }
end


class Participant < ApplicationRecord
  has_many :answers, dependent: :destroy
end

Когда участник отвечает на опрос, ему показывают один вопрос за раз.

То, что я пытаюсь достичь, - это показать участнику текущий вопрос , на котором он из общего числа вопросов

Я могу чтобы получить общее количество вопросов с помощью этого кода:

<%=@study.questions.count %>

Но я не уверен, как получить текущий вопрос с тем, как я написал представление ответов в новом. html .erb. Вот код в этом файле:

<div class="wrap">


  <h1 class="welcome-header study-name"><%= @study.study_name %></h1>
  <div class="study-wave5"> <%= image_tag  "wave5.svg" %></div>
  <div class="section colour-section">

    <h2><%= @question.question %></h2>
    <h2> 1 out of <%=@study.questions.count %></h2>

    <%= form_with model: @answer, url: study_question_answers_path(@study, @question), local: true do |form| %>
      <%= form.hidden_field :participant_id %>

      <% @question.answers.each do |answer| %>


        <% if answer.errors.any? %>
          <div id="error_explanation">
            <h2>
              <%= pluralize(answer.errors.count, "error") %> prohibited
              this answer from being saved:
            </h2>
            <ul>
              <% answer.errors.full_messages.each do |msg| %>
                <li><%= msg %></li>
              <% end %>
            </ul>
          </div>
        <% end %>

      <% end %>

      <%= form.text_area :text, class: 'textfield', id: 'textarea'%><br>
      <div id="textarea_feedback"></div>
      <div class="submit-btn"><%= form.submit%></div>
    <% end %>

  </div>

</div>

Вот изображение, показывающее, чего я пытаюсь достичь:

enter image description here

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Я бы просто добавил еще один столбец к вашей модели Вопросов, названный question_number, и использовал бы его.

Это понятно и не требует, чтобы вы взламывали что-то вместе, чтобы работать, иначе Принцип Наименьшего Удивления.

0 голосов
/ 04 марта 2020

Вы можете использовать

<%= @study.questions.where('id <= ?', @question.id).count %> out of <%=@study.questions.count %>

, но я бы использовал другое поле для заказа ваших вопросов. Посмотрите на что-то вроде акта act_as_list, вы почти наверняка захотите каким-то образом изменить порядок своих вопросов.

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