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

时间:2015-05-23 11:33:45

标签: ruby-on-rails variables activerecord bulkinsert bulk

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

<% 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中创建多个活动记录的线程,但是,我不知道如何在这里传递变量并使批量创建选项有效。

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

提前谢谢!

2 个答案:

答案 0 :(得分:0)

基本上,你需要:

  1. 使用现有模型属性或创建新属性(attr_accessor)以与视图中的text_area字段相关联。
  2. 将该属性添加到您允许的user_params
  3. 执行此操作后,将从您的视图中填充此新属性,并在控制器中进行处理。您只需要打入用户名,根据需要进行格式化并在循环中创建新用户。

答案 1 :(得分:0)

您可以在控制器中执行此操作。先做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

您可以将其中一部分移至模型中,例如&#34; @ domain&#34;部分。 您还可以在每个用户的表单中创建新字段,但这可能会让您走上正确的轨道。