Rails用于创建相同模型的多个条目的表单

时间:2014-11-26 07:10:11

标签: ruby-on-rails ruby forms

我是rails的新手,我正在努力设计一个表单。我有“用户”的型号和控制器。我创建了一个一次接受一个用户的表单。我想要创建的是一个从同一页面接受多个用户的表单。

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to @user
    else
      render 'new'
    end
  end

新表格

<%= form_for(@user) do |f| %>
    <%= render 'fields', f: f %>
    <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
<% end %>

_fields.html.erb

<fieldset>
    <%= f.label :name %>
    <%= f.text_field :name %>

    <%= f.label :email %>
    <%= f.text_field :email %>

    <%= f.label :password %>
    <%= f.password_field :password %>

    <%= f.label :password_confirmation, "Confirmation" %>
    <%= f.password_field :password_confirmation %>
</fieldset>

注意:我知道如何创建Nested form。如果您看到该链接,教程将演示如何为调查创建多个问题。我想要的是以相同的形式创建多个调查。

1 个答案:

答案 0 :(得分:1)

尝试做类似的事情:

<%= form_tag(some_url_path, method: :put) do %>
    <% for user in @users %>  
        <%= fields_for "users[]", user do |f| %>  
            <%= render 'fields', f: f, user: user %>
        <% end %>  
    <% end %>  
    <%= submit_tag "Submit" %>
<% end %> 

并且在控制器中,您应该在@users方法中创建@user而不是一个new,并在create方法中接受多个用户而不是一个。

更新:

当您想要更新控制器中的用户时,您可以这样做(我没有对其进行测试):

User.update(params[:users].keys, params[:users].values)

并创建:

User.create(params[:users].values)

params[:users].keys应该是用户ID的哈希值,而params[:users].values应该是相应用户的哈希属性

我不知道您打算如何管理动态数量的用户,但这可能有所帮助。