【问题标题】:Creating multiple associated records from a single form从单个表单创建多个关联记录
【发布时间】:2015-01-25 12:17:21
【问题描述】:

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

  • 列出has_and_belongs_to_many 卡片(如在名片中)
  • 名片belongs_to公司(一个公司可以有很多张名片)

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

现在我明白了,如果我想在我的列表表单中包含一个卡片字段,我会使用类似的东西:

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

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

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    简答:

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

    长答案

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

    这样看:

    • listing 和 company 可以单独存在
    • card 假定存在 company
    • listing 和 card 通过连接表关联

    Ergo:如果您想创建一个具有关联card 的listing,您还需要一个company 所属的company。因此,我们会将公司置于层级之上并执行以下操作:

    class CompanyController < ApplicationController
      ...
      def new
        @company = Company.new
        @card = @company.cards.build
        @listing = @card.listings.build
      end
      ...
    end
    

    分别在嵌套形式中,company 在顶部,card 下一个和 listing 最后:

    = form_for @company do |company_f|
      - # company stuff
      = company_f.fields_for @card do |card_f|
        - # card stuff
        = card_f.fields_for @listing do |listing_f|
          - # listing stuff
    

    【讨论】:

    • 谢谢,这正是我要找的。没有从这个角度考虑。我在想也许你可以为这个问题建议一个更好的标题?
    • @kitsched 我真的很受宠若惊。也许像“以单一形式启动和创建多个关联记录”这样的标题适合这个问题?你说什么?
    【解决方案2】:

    【讨论】:

    • 我使用fields_for,但问题是公司资源为零。
    • 如果定义了公司,只需使用其 id。如果不存在,也使用 company.build
    • 或者你可以有一个 select_tag 用于公司选择。
    • 这就是问题所在,不是的,基本上我想一次性创建Listing、Card和Company。
    • 使用 company.build,并为 if wit fields_for 添加更多附加属性。
    猜你喜欢
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多