Новичок застрял в проекте Ruby on Rails "... должен существовать" - PullRequest
0 голосов
/ 06 октября 2018

Таким образом, мое задание просит меня создать страницу, которая будет обрабатывать студентов, курсы и разделы.Я должен был использовать many_to_many или какой-то подобный метод, чтобы иметь возможность перечислить все эти общие данные.Моя конкретная проблема заключается в том, что я создал новую таблицу (rails g учащиеся, участвующие в скаффолде: разделы ссылок: ссылки), которая, похоже, не работает.когда я пытаюсь создать новую запись, используя ученика и секцию, я получаю сообщение об ошибке, в котором говорится, что «секция должна существовать» ошибка .Я понятия не имею, откуда эта ошибка.Поле разделов в этом представлении заполняется только существующими разделами, поэтому тот факт, что он говорит «должен существовать», очень ... сбивает с толку.Кто-нибудь может указать мне правильное направление, чтобы решить это?Я перестроил этот проект 3 раза, пытаясь разными способами, и просто ... застрял.Я выложу соответствующий код, но если я ошибаюсь, какие разделы вам могут понадобиться, я с удовольствием выложу остальные.

class Enrollment < ApplicationRecord
belongs_to :section
belongs_to :student 
end

<%= form_with(model: enrollment, local: true) do |form| %>
<% if enrollment.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(enrollment.errors.count, "error") %> 
prohibited this enrollment from being saved:</h2>

  <ul>
  <% enrollment.errors.full_messages.each do |message| %>
    <li><%= message %></li>
  <% end %>
  </ul>
 </div>
 <% end %>

<div class="field">
<%= form.label :student_id %>
<%= form.collection_select :student_id, Student.order(:student_name), :id, 
:student_id, include_blank:true %>
</div>

<div class="field">
<%= form.label :course_id %>
<%= form.collection_select :course_id, Course.order(:name), :id, :name, 
include_blank: true %>
</div>

<div class="field">
<%= form.label :sections_number %>
<%= form.collection_select :section_number, Section.all, :id, 
:section_number, include_blank:false %>
</div>

<div class="actions">
<%= form.submit %>
</div>
<% end %>

class Section < ApplicationRecord
has_many :enrollments
has_and_belongs_to_many :students, through: :enrollments       
belongs_to :course

def numsem
    "#{course.name} #{course_id}"
end
end

L

----------------------- РЕДАКТИРОВАТЬ ДОБАВИТЬ КОД КОНТРОЛЛЕРА ----------------

class EnrollmentsController < ApplicationController
before_action :set_enrollment, only: [:show, :edit, :update, :destroy]

# GET /enrollments
# GET /enrollments.json
def index
@enrollments = Enrollments.all
end

# GET /enrollments/1
# GET /enrollments/1.json
def show
end

# GET /enrollments/new
def new
@enrollment = Enrollments.new
@sections = Section.all
@students = Student.all
end

# GET /enrollments/1/edit
def edit
end

# POST /enrollments
# POST /enrollments.json
def create
@enrollment = Enrollments.new(enrollment_params)

respond_to do |format|
  if @enrollment.save
    format.html { redirect_to @enrollment, notice: 'Enrollments was 
successfully created.' }
    format.json { render :show, status: :created, location: @enrollment }
   else
    format.html { render :new }
    format.json { render json: @enrollment.errors, status: 
 :unprocessable_entity }
  end
 end
 end

# PATCH/PUT /enrollments/1
# PATCH/PUT /enrollments/1.json
def update
respond_to do |format|
  if @enrollment.update(enrollment_params)
    format.html { redirect_to @enrollment, notice: 'Enrollments was 
 successfully updated.' }
    format.json { render :show, status: :ok, location: @enrollment }
  else
    format.html { render :edit }
    format.json { render json: @enrollment.errors, status:      
:unprocessable_entity }
  end
end
end

# DELETE /enrollments/1
# DELETE /enrollments/1.json
def destroy
@enrollment.destroy
respond_to do |format|
  format.html { redirect_to enrollments_index_url, notice: 'Enrollments was 
successfully destroyed.' }
  format.json { head :no_content }
end
end

private
# Use callbacks to share common setup or constraints between actions.
def set_enrollment
  @enrollment = Enrollments.find(params[:id])
end

# Never trust parameters from the scary internet, only allow the white list 
through.
def enrollment_params
  params.require(:enrollment).permit(:student_id, :section_id)
end
end

1 Ответ

0 голосов
/ 06 октября 2018

Раздел должен существовать

Ошибка в том, что вы пытаетесь сохранить @enrollment с nil section_id, что вызывает это исключение.Проблема заключается в вашей форме , где у вас есть этот

<%= form.collection_select :section_number, Section.all, :id, 
:section_number, include_blank:false %>

, который должен быть

<%= form.collection_select :section_id, Section.all, :id, 
:section_number, include_blank:false %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...