Rails - 使用一个提交按钮提交多个表单

时间:2016-01-01 14:33:32

标签: html ruby-on-rails forms ruby-on-rails-4

在我的应用程序中,我有一个用于编辑所有用户的页面,但是我希望这样我只需要单击一个提交按钮来更新用户'详细信息,但目前我只能编辑一个,然后点击“更新用户”#39;按钮可以更改该用户的详细信息。

_form.html.erb

<%= form_tag edit_user_path do |form| %>
  <% @users.each do |user| %>
    <%= form_for user do |f| %>
      <% if @user.errors.any? %>
        <div id="error_explanation">
          <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
          <ul>
          <% @user.errors.full_messages.each do |message| %>
            <li><%= message %></li>
          <% end %>
          </ul>
        </div>
      <% end %>
      <div class="field">
        <%= f.label :username %><br>
        <%= f.text_field :username %>
      </div>
      <div class="field">
        <%= f.label :sunday %><br>
        <%= f.text_field :sunday %>
      </div>
      <div class="field">
        <%= f.label :monday %><br>
        <%= f.text_field :monday %>
      </div>
      <div class="field">
        <%= f.label :tuesday %><br>
        <%= f.text_field :tuesday %>
      </div>
      <div class="field">
        <%= f.label :wednesday %><br>
        <%= f.text_field :wednesday %>
      </div>
      <div class="field">
        <%= f.label :thursday %><br>
        <%= f.text_field :thursday %>
      </div>
      <div class="field">
        <%= f.label :friday %><br>
        <%= f.text_field :friday %>
      </div>
      <div class="field">
        <%= f.label :saturday %><br>
        <%= f.text_field :saturday %>
      </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
  <% end %>
  <%= submit_tag "Submit" %>
<% end %>

正如您所看到的,代码底部的submit_tag绝对没有任何内容,但我希望它能够更新所有用户&#39;细节。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

反对:

<%= form_for user do |f| %>

使用:

<%= fields_for "users[]", user do |f| %>

之后,您将获得每个user_id的控制器参数值:

"users"=>{"user_id1"=>{"attr1"=>"value1"}, "user_id2"=>{"attr1"=>"value1"}

另外,为了使更新对象集合成为可能,可以像这样向UsersController添加一个动作:

def update_collection
  # Update users here
end

并更新config/routes.rb中的路由:

resources :users do
  collection do
    match 'update_collection',  via: [:put, :patch]
  end
end

并在主窗体中使用正确的网址:

<%= form_tag update_collection_users_path, method: :put do |form| %>