无法创建form_for关联模型

时间:2013-12-11 07:31:30

标签: ruby-on-rails associations form-for nested-form-for

我正在编写一个简单的Web应用程序,我喜欢称之为PMS(项目管理系统)。这个应用程序我有2个模型项目学生。我已经设置了(我猜......我是新手)这两个模型之间的联系。项目有很多学生,但学生属于一个项目(也许它会随着时间而变化)。

但我的问题是让一切都在一起工作。我不知道如何在新项目表格中插入新学生。我已经尝试了一切,但仍然没有!

以下是我的源文件:

项目控制器:

class ProjectsController < ApplicationController
  def show
    @projects = Project.all
  end

  def create
    @project = Project.new(project_params)
    @project.status = "Waiting"
    @project.save
    redirect_to root_path
  end

  private
    def project_params
      params.require(:project).permit(:title, :lecturer)
    end
end

学生管理员:

class StudentsController < ApplicationController
  def create
    @project = Project.find(params[:project_id])
    @student = @project.students.create(params[:student])
    @student.save
  end
end

型号:

class Project < ActiveRecord::Base
  has_many :students
end

class Student < ActiveRecord::Base
  belongs_to :project
end

查看:

添加新项目

<%= form_for :project, url: projects_path do |f| %>
    <p>
        <%= f.label :title %>
        <%= f.text_field :title %>
    </p>
    <p>
        <%= f.label :lecturer %>
        <%= f.text_field :lecturer %>
    </p>
        <%= form_for([@project, @project.students.build]) do |s| %>
          <p>
            <%= s.label :name %><br />
            <%= s.text_field :name %>
          </p>
        <% end %>
    <p>
        <%= f.submit %>
    </p>
<% end %>

路线:

RoRPMS::Application.routes.draw do
  # You can have the root of your site routed with "root"
  root 'projects#show'

  resources :projects do
    resources :students
  end
end

1 个答案:

答案 0 :(得分:0)

您也可以使用“nested_form”与学生一起创建项目

<%= nested_form_for @project do |f| %>
    <p>
        <%= f.label :title %>
        <%= f.text_field :title %>
    </p>
    <p>
        <%= f.label :lecturer %>
        <%= f.text_field :lecturer %>
    </p>
        <%= fields_for :students do |s| %>
          <p>
            <%= s.label :name %><br />
            <%= s.text_field :name %>
          </p>
        <% end %>
        <%= f.link_to_add "Add new student", :students %>
    <p>
        <%= f.submit %>
    </p>
<% end %>

在项目模型中添加

accepts_nested_attributes_for :students