簡體   English   中英

從控制器到關聯模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM