0

我不能拯救學生一個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 %> 

我的問題是如何計劃和學生(分配給它)用一種形式來保存

+0

您正在嘗試執行嵌套窗體。看看這個[Ryan Bates關於嵌套表單的視頻](http://railscasts.com/episodes/196-nested-model-form-revised)。 –

回答

1

首先,您的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 

因爲您的項目現在可以接受學生的嵌套屬性,所以應該在項目中自動創建它們。