从单个表单创建多个关联记录

时间:2015-01-25 12:17:21

标签: ruby-on-rails activerecord

我有一个创建列表的表单 - 但我希望它创建一些关联的记录。我的模型结构如下:

  • 列出has_and_belongs_to_many卡片(如名片)
  • belongs_to公司(公司可以拥有多张名片)

当我提交此表单时,我想一次性创建一个列表,一张卡片和一个公司。还应该运行验证。

现在我明白,如果我想在我的清单表格中加入一个卡片字段,我将会使用以下内容:

@card = @listing.cards.build
[...]
fields_for(@listing, @card) do |c|

但是,如果我想在表单中包含公司字段,该怎么办?我查了一下,但@card.company是零。

2 个答案:

答案 0 :(得分:1)

简短回答

构建card不会自动创建关联的company

答案很长

如果你想创建一个company,恕我直言的最合理的方式是从listing开始并围绕它创建关联甚至

这样看:

  • listingcompany可以自行存在
  • card预先假定存在company
  • listingcard通过联接表关联

Ergo:如果您要创建具有关联listing的{​​{1}},则还需要card所属的company。因此,我们会将公司放在层次结构之上,并执行以下操作:

card

分别在您的嵌套表单中,您的class CompanyController < ApplicationController ... def new @company = Company.new @card = @company.cards.build @listing = @card.listings.build end ... end 位于顶部,company位于下方,card位于最后:

listing

答案 1 :(得分:0)

您应该使用fields_for表单助手 http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

或者使用宝石之类的 https://github.com/ryanb/nested_form