我想创建一个表单,让您创建一个A类型的项目。在该表单中,您可以添加多个B类项目以与您正在创建的A类项目相关联。
我想我理解如何在模型中做到这一点 - 只是有一个has_many并属于关系。
我不确定如何在UI中执行此操作。是的,现在我有脚手架,它只有我正在创建的项目属性的字段。有没有办法让它显示用于添加我们在模型文件中看到的has_many中定义的类型项的字段?
修改
ClassA
has_many :ClassB
ClassB
belongs_to :ClassA
答案 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
稍后,一旦你感觉到你知道发生了什么,你可能想在前端添加一些按钮,让你“动态”添加新的项目。