2015-05-23 18 views
0

我有一个选项,通过一个与他们的姓名和电子邮件地址作为参数来创建用户一个创建多个活动记录:与变量

<% 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”以创建电子邮件地址,例如,有一个测试名称,它应该创建一个[email protected]电子邮件地址,以便批量中的每个用户都有一个名称和电子邮件地址。这部分没有问题,只是在同一页面上。

我已经阅读了几条关于如何在rails中创建多个活动记录的线程,但是,我不确定如何在此处传递变量并使批量创建选项有效。

如果需要任何额外的细节,请让我知道。

预先感谢您!

+0

参数在'params'哈希中从您的视图传递到您的控制器。 –

+0

@steveklein我有'def user_params params.require(:user).permit(:name,:email) end'在我的users_controller中为单个用户创建。但是,我不能使用这个或类似的多个条目,或者至少我不明白如何做到这一点。如果你可以详细说明这将会很棒 –

+0

好的,我发布了一个答案,因为它有点牵扯到评论。如果您有任何问题,请告诉我。 –

回答

0

您可以在您的控制器中执行此操作。首先做什么史蒂夫克莱恩说,然后你可以做到以下几点。 例如,如果你想使用一个文本字段中输入新用户名,你可以这样做在您的形式:

<%= 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”部分。 您也可以在每个用户的表单中创建新字段,但这可能会让您走上正确的轨道。

+0

谢谢,我认为这应该有所帮助!我将尝试它并发布后 –

+0

这里是我现在在我的控制器中有: 'def create @user = User.new(user_params) if @ user.save flash [:info] =“User added!“ redirect_to的users_path 别的 渲染 '新' 端 端 DEF散装 user_names_string =参数[:user_names_string] USER_NAMES = user_names_string.split( '')的地图(&:条)。 user_names.each做| USER_NAME | User.create(名称:USER_NAME,电子邮件:USER_NAME + “@ domain.com”) 结束 结束 高清user_params params.require(:用户).permit(:名称,:电子邮件:USER_NAMES ,:user_names_string) end end'但它不会拆分字符串,因为它的零,也是“冷杉t形式的参数不能包含零或为空“ –

+0

使用https://gist.github.com/来创建和链接代码,所以我可以更好地阅读它......但是你应该把它放在你的创建中(也许更新)行动,而不是单独行动。 – Fritzz

0

基本上,你将需要:

  1. 既可以使用现有的模型属性或创建一个新的(attr_accessor)与在你看来一个text_area字段关联。
  2. 将该属性添加到允许的user_params

一旦你这样做了,这个新属性将从你的视图中填充并在你的控制器中可用于处理。您只需要分解用户名,根据需要设置格式并在循环中创建新用户。