Я пытаюсь создать базовый инструмент для опросов c в качестве моего первого проекта на Rails. В данный момент я работаю над проверкой для предоставления нового ответа на вопрос опроса. Ниже моя модель ответа.
class Answer < ApplicationRecord
belongs_to :question
belongs_to :participant
validates :text, presence: true,
length: { minimum: 5, maximum: 100 }
end
Я настроил оператор if, который приведет вас к следующему вопросу, если проверка прошла успешно. Моя проблема в том, что я не уверен, что нужно сделать в остальном для этого утверждения.
Для аналогичной проверки в других контроллерах я написал оператор render как URL страниц. Например: Просмотреть все вопросы + добавить новый вопрос отображаются на странице исследований / идентификатора. Таким образом, если проверка вопроса не удалась, то рендерингом будет «исследование / шоу».
URL-адрес для добавления нового ответа выглядит следующим образом. http://localhost:3000/studies/20/questions/47/answers/new
Для большего контекста вот мой код:
*Answers Controller*
class AnswersController < ApplicationController
def new
@study = Study.find(params[:study_id])
@question = @study.questions.find(params[:question_id])
@participant = find_participant
@answer = @question.answers.build(participant: @participant)
end
def create
@study = Study.find(params[:study_id])
@question = @study.questions.find(params[:question_id])
@answer = @question.answers.build(answer_params)
if @answer.save
next_question = @question.next_question
redirect_to next_question_path(next_question, @answer) if next_question.present?
else
#I want to render the current page the participant is on to display errors here.
end
end
***some private functions here***
end
* New Answer View *
<div class="wrap">
<h1 class="med-header"><%= @question.question %></h1>
<%= 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 %><br>
<%= form.submit %>
<% end %>
</div>
Что я могу сделать в другом?