在同一页面上创建多个非嵌套模型

有没有办法在同一页面上创建多个模型而不是嵌套在另一个模型中?

例如,我想要一个可以创建用户的表单。 它有两个简单的字段,名字和姓氏,显示在同一行。 我希望能够添加一个链接“添加新用户”,这将创建(使用javascript)相同的行而不回发,并允许我在同一页面上创建两个用户。

如何使用rails实现这一目标?

添加字段并只保留一个表单,一个提交按钮:

= form_tag(url: create_user_path, remote: true) do %table %tr %td= text_field_tag 'user[][first_name]' %td= text_field_tag 'user[][last_name]' %tr.actions %td= submit_tag 'Save' %td= button_tag 'Add new user form', id: 'add_user_form' %tr.new_user_row.hidden # hidden class matches the css rule: {display:none;} %td= text_field_tag "user[][first_name]" %td= text_field_tag "user[][last_name]" :javascript # jQuery $('#add_user_form').bind('click', function(e) { var row = $('tr.new_user_row').clone().removeClass('hidden new_user_row'); $('tr.actions').before(row); # will append the  before the actions }); 

在UsersController中:

 def create params[:user].each do |attr| User.create(attr) end end 

使用一个模型在一个表单中创建多个记录

这是users_controller.rb

  def new end def create_multiple params[:users].each do |user| user = User.create(user) end redirect_to users_url end 

这是new.html.erb

 <%= form_tag '/users/create_multiple' do %> <%= render 'user_fields' %> 
<%= submit_tag %>
<% end %>

这是_user_fields.html.erb

  

User 1

<%= text_field_tag "users[][firstname]", nil, :placeholder => "first name" %> <%= text_field_tag "users[][lastname]", nil, :placeholder => "last name" %>
Add a New User

记录结果

 Started POST "/users/create_multiple" for 127.0.0.1 at 2013-06-05 00:40:07 +0700 Processing by UsersController#create_multiple as HTML Parameters: {"utf8"=>"V", "authenticity_token"=>"xOPM6PB1h6DMUEGS7fX9/eWs/e6dg XKRj231ReviKFo=", "users"=>[{"firstname"=>"test1", "lastname"=>"last1"}, {"first name"=>"test2", "lastname"=>"last2"}], "commit"=>"Save changes"} ←[1m←[36m (78.0ms)←[0m ←[1mbegin transaction←[0m ←[1m←[35mSQL (49.0ms)←[0m INSERT INTO "users" ("created_at", "firstname", "la stname", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Tue, 04 Jun 2013 17: 40:08 UTC +00:00], ["firstname", "test1"], ["lastname", "last1"], ["updated_at", Tue, 04 Jun 2013 17:40:08 UTC +00:00]] ←[1m←[36m (7.0ms)←[0m ←[1mcommit transaction←[0m ←[1m←[35m (0.0ms)←[0m begin transaction ←[1m←[36mSQL (3.0ms)←[0m ←[1mINSERT INTO "users" ("created_at", "firstname", "lastname", "updated_at") VALUES (?, ?, ?, ?)←[0m [["created_at", Tue, 04 Jun 2 013 17:40:08 UTC +00:00], ["firstname", "test2"], ["lastname", "last2"], ["updat ed_at", Tue, 04 Jun 2013 17:40:08 UTC +00:00]] ←[1m←[35m (5.0ms)←[0m commit transaction Redirected to http://localhost:3000/users Completed 302 Found in 156ms (ActiveRecord: 142.0ms) 

您可以根据自己的意愿添加validation代码,以下是如何为多个记录基本结构传递表单参数