使用变量创建多个活动记录

Create multiple active records with variables

我可以选择以用户的姓名和电子邮件地址作为参数一个一个地创建用户:

<% provide(:title, 'Add User') %>
<h1>Add User</h1>

<div class="row">
<div class="col-md-4 col-md-offset-4">
<%= form_for(@user) do |f| %>
  <%= render 'shared/user_error_messages' %>

  <%= f.label :name %>
  <%= f.text_field :name, class: 'form-control' %>

  <%= f.label :email %>
  <%= f.text_field :email, class: 'form-control'%>

  <%= f.submit "Add User", class: "btn btn-primary" %>
<% end %>
</div>
</div>

我想做的是可以选择一次创建多个用户。它应该是一个文本区域,您可以在其中输入要添加的用户的名称。然后它应该解析名称并添加“@domain.com”以创建电子邮件地址,例如有一个测试名称,它应该创建一个 test.name@domain.com 电子邮件地址,以便来自批量的每个用户都有一个名称和电子邮件地址。这部分没有问题,只是为了在同一页上。

我已经阅读了一些关于如何在 rails 中创建多个活动记录的话题,但是,我不确定如何在此处传递变量以及如何使批量创建选项起作用。

如果需要任何其他详细信息,请告诉我。

提前致谢!

基本上,您需要:

  1. 使用现有模型属性或创建新模型属性 (attr_accessor) 以与视图中的 text_area 字段相关联。
  2. 将该属性添加到您允许的 user_params

完成后,这个新属性将从您的视图中填充,并在您的控制器中可用以进行处理。您只需要分解用户名,根据需要设置格式并循环创建新用户。

您可以在控制器中执行此操作。首先按照 steve klein 所说的进行操作,然后您可以执行以下操作。 例如,如果您想使用文本字段输入新用户名,您可以在表单中执行类似操作:

<%= f.label :user_names %>
<%= f.text_field :user_names_string, class: 'form-control' %>

然后在您的控制器中访问 :user_names_string,如下所示:

user_names_string = params[:user_names_string]
user_names = user_names_string.split(',').map(&:strip)
user_names.each do |user_name|
  User.create(name: user_name, email: user_name + "@domain.com")
end

您可以将其中的一些移动到模型中,例如“@domain”部分。 您还可以在每个用户的表单中创建新字段,但这可能会让您走上正轨。