Таким образом, я создаю две модели, одну «Курс» и одну «Секцию» со скаффолдом, и мне нужен раздел, чтобы отобразить курсы в раскрывающемся меню, отражающем любые курсы, которые были созданы в модели курса, и использовать его для создания в разделе.Мне удалось получить выпадающее меню, отображающее курсы, созданные из «Курса», но когда я создаю новый раздел, он отображает курс как пустой.Курс имеет название, отдел, номер и кредитные часы.Раздел содержит семестр, номер, курс и номер комнаты.
То, что я изменил, чтобы сделать выпадающее меню, было (в _form.html.erb представлений раздела)
<div class="field">
<%= form.label "Courses", class: 'courses'%>
<%= form.collection_select(:section, Course.all, :id, :name) %>
</div>
Это выдает ошибку «Курсы должны существовать»
Ранее у меня было:
<div class="field">
<%= form.label "Courses", class: 'courses'%>
<%= form.collection_select(:course_ids, Course.all, :id, :name) %>
Это не выдало ошибку и позволило мне создать раздел, просто не добавляя выбранный курс в базу данных разделов.
https://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select
Из прочтения выясняется: имя должно быть определено в части курса курса, но при попытке это выдает ошибку.Я также понимаю, что мне не нужно записывать курс с определенным идентификатором раздела, поэтому он не сохраняет его при создании нового раздела.Мой вопрос: что я могу добавить или изменить, чтобы это работало?Использование коллекции выбрать не то, что нужно сделать?
ПРАВКА, чтобы включить section_controller.rb
class SectionsController < ApplicationController
before_action :set_section, only: [:show, :edit, :update, :destroy]
# GET /sections
# GET /sections.json
def index
@sections = Section.all
end
# GET /sections/1
# GET /sections/1.json
def show
end
# GET /sections/new
def new
@section = Section.new
end
# GET /sections/1/edit
def edit
end
# POST /sections
# POST /sections.json
def create
@section = Section.new(section_params)
respond_to do |format|
if @section.save
format.html { redirect_to @section, notice: 'Section was successfully created.' }
format.json { render :show, status: :created, location: @section }
else
format.html { render :new }
format.json { render json: @section.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /sections/1
# PATCH/PUT /sections/1.json
def update
respond_to do |format|
if @section.update(section_params)
format.html { redirect_to @section, notice: 'Section was successfully updated.' }
format.json { render :show, status: :ok, location: @section }
else
format.html { render :edit }
format.json { render json: @section.errors, status: :unprocessable_entity }
end
end
end
# DELETE /sections/1
# DELETE /sections/1.json
def destroy
@section.destroy
respond_to do |format|
format.html { redirect_to sections_url, notice: 'Section was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_section
@section = Section.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def section_params
params.require(:section).permit(:semester, :number, :course, :room_number)
end
end
Я считаю, что мне нужно как-то связать их с последней частью:
def section_params
params.require(:section).permit(:semester, :number, :course, :room_number)
ПРАВКА: http://rubyisonrails.com/pictures/part1.PNG http://rubyisonrails.com/pictures/part2.PNG">