Rails - 复制表单的一部分以提交多个记录

时间:2014-10-08 12:18:31

标签: ruby-on-rails forms ruby-on-rails-4

我有一个包含许多字段的rails表单。 用户希望能够通过单击按钮复制包含6个字段的表单部分,以便6个字段在页面上出现两次,然后填写字段并提交表单,创建2个新记录。

= form_for @item, :html => { :class => "form-horizontal" } do |f|
    .panel
      h4 Personal Details
      .field
        = f.label :contact_name
        = f.text_field :contact_name
      .field
        = f.label :email_address
        = f.text_field :email_address

    .duplicate-section.panel
      h4 Info
      .field
        = f.label :location
        = f.select :location
      .field
        = f.label :time
        = f.text_field :time

    = link_to "Add new Info Section", '#'  

link_to会在表单中添加一个新的.duplicate-section,以便我可以在页面上创建额外的字段,但我不知道如何将表单作为两个单独的记录提交。

1 个答案:

答案 0 :(得分:0)

要对此进行管理,您可以创建一个封装差异记录的模型:

运行

rails g model item_wrapper
bundle exec rake db:migrate

应用程序/模型/ item_wrapper.rb

class ItemWrapper < ActiveRecord::Base
  has_many :items
  accepts_nested_attributes_for :items
end

按照this railscast创建添加和删除信息部分按钮。

finnaly你可以自定义通过将字段更改为隐藏生成的javascript并填充项目重复字段的值。

总结一下:

  1. 为您的商品创建一个包装器(仅包含一个ID)
  2. 在包装表单中为您的商品创建一个has_many嵌套表单(使用fields_for)
  3. 创建add_fields按钮(cf rails cast)
  4. 然后自定义您的js add_fields函数以更改具有重复内容的字段
  5. 干杯

    相信很明显,我可以根据需要编辑答案。