在创建另一种类型的项目时添加一种类型的可变数量的项目

时间:2013-06-29 19:46:02

标签: ruby-on-rails entity-relationship scaffolding

我想创建一个表单,让您创建一个A类型的项目。在该表单中,您可以添加多个B类项目以与您正在创建的A类项目相关联。

我想我理解如何在模型中做到这一点 - 只是有一个has_many并属于关系。

我不确定如何在UI中执行此操作。是的,现在我有脚手架,它只有我正在创建的项目属性的字段。有没有办法让它显示用于添加我们在模型文件中看到的has_many中定义的类型项的字段?

修改

ClassA
  has_many :ClassB


ClassB
  belongs_to :ClassA

1 个答案:

答案 0 :(得分:2)

我们假设您的项目A是人,项目B是项目。所以,对于你所说的,一个人有很多项目。 (我决定使用“真实世界”资源,而不是项目A和项目B来澄清示例)。

以下是定义模型关联的方法:

class Person < ActiveRecord::Base
  has_many :projects
  accepts_nested_attributes_for :projects
end

class Project < ActiveRecord::Base
  belongs_to :person
end

然后,您的Person的形式将如下所示:

<%= form_for @person do |person_form| %>
  ...
  <%= person_form.fields_for :projects do |project_builder| %>
    # Here goes the fields of the projects
    <%= project_builder.text_field :name %>
  <% end %>
  ...
<% end %>

这里的关键是fields_for方法,它可以让你输入你的个人表单,形成与该人相关的项目的构建者。

重要的是要知道,如果要创建新Person,显然没有关联的Projects,因此fields_for部分将为空。您可能希望首先在#new动作中基本上这样做:

def new
  @person = Person.new
  5.times { @person.projects.build }
end

稍后,一旦你感觉到你知道发生了什么,你可能想在前端添加一些按钮,让你“动态”添加新的项目。