0

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

我想我明白如何在模型中做到这一点——只要有一个 has_many 和属于关系。

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

编辑

ClassA
  has_many :ClassB


ClassB
  belongs_to :ClassA
4

1 回答 1

2

假设您的项目 A 是一个人,项目 B 是一个项目。所以,对于你所说的,一个人有_许多项目。(为了澄清示例,我决定使用“真实世界”资源,而不是 Item A 和 Item 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 关联的项目的表单构建器放入您的 Person 表单中。

重要的是要知道,如果您正在创建一个新人员,显然没有关联的项目,因此 fields_for 部分将为空。您可能想从基本上在 #new 操作中执行此操作开始:

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

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

于 2013-06-29T20:07:11.657 回答