【问题标题】:Rails Form for creating multiple entries of same model用于创建同一模型的多个条目的 Rails 表单
【发布时间】:2014-11-26 07:10:10
【问题描述】:

我是 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。如果您看到该链接,本教程将展示如何为调查创建多个问题。我想要的是在同一个表单中创建多个调查。

【问题讨论】:

  • 多个用户,你的意思是确切的数字还是数字应该是动态的?
  • 如果User 属于任何其他模型,您可以为该模型创建一个表单,并嵌套多个用户。
  • 数字将是动态的,即它将取决于存在的其他模型的数量
  • @Santosh 用户不属于任何其他模型。我想要一个独立的用户表单,这将有助于一次创建多个用户。

标签: ruby-on-rails ruby forms


【解决方案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 %> 

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

更新:

当你想在控制器中更新你的用户时,你可以这样做(我没有测试过):

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

并创建:

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

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

我不知道您打算如何管理动态用户数,但也许这会有所帮助。

【讨论】:

  • 我能够使用类似的方法(使用 form_tag)让它工作,但我仍然不确定这是最好的方法,因为它在 rails 4 中使用强大的参数造成了复杂性。所以保持它对任何未来的答案开放。
  • 是的,绝对应该更改params[:users] 并使用强参数。我只是想举例说明如何解决它
猜你喜欢
  • 2021-12-19
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多