[英]Getting from controller to associated model
保存項目時,我無法通過一個POST來保存學生。
我的項目控制器看起來像:
class ProjectsController < ApplicationController
def index
@projects = Project.all
end
def new
@project = Project.new
3.times do
student = @project.students.build
end
end
def create
@project = Project.new(project_params)
@project.status = "Waiting"
# I'm not sure about these lines
@project.students.each do |student|
student = Student.new(params[:name])
end
@project.save!
redirect_to projects_path
end
private
def project_params
params.require(:project).permit(:name, :lecturer)
end
end
而new_project
視圖如下所示:
<h1>Creating new project...</h1>
<%= form_for @project, url: projects_path do |f| %>
<p>
<%= f.label :name %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :lecturer %>
<%= f.text_field :lecturer %>
</p>
<p>
<%= f.fields_for :students do |s| %>
<%= s.label :name %>
<%= s.text_field :name %>
<% end %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
我的問題是如何使用一種形式保存“項目和學生”(分配給它)?
首先,您的project_params
方法不允許提交學生的姓名。 嘗試這樣的事情:
def project_params
params.require(:project).permit(:name, :lecturer, students_attributes: [ :name ] )
end
接下來,在您的Project
模型中,您需要
accepts_nested_attributes_for :students
(您可能已經把它放在那里了,但是如果沒有,則需要這樣做。)
既然完成了,您在Project#create
方法中就不需要這些行了:
@project.students.each do |student|
student = Student.new(params[:name])
end
由於您的項目現在可以接受學生的嵌套屬性,因此在save
項目時應與項目一起自動創建它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.