简体   繁体   中英

Rails - Submitting multiple forms with one submit button

In my application I have a page for editing all users however I would like it so that I only have to click one submit button to update the users' details but at the moment I can only edit one and click the 'Update User' button to change that one user's details.

_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 %>

As you can see that submit_tag at the bottom of the code does absolutely nothing however I would like it to update all the users' details. Any help would be greatly appreciated!

Against:

<%= form_for user do |f| %>

use:

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

After that you will get in the controller parameters values for each user_id:

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

Also to make possible updating a collection of object a way to do it is to add an action to the UsersController like this:

def update_collection
  # Update users here
end

and update routing in config/routes.rb :

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

and use proper url in the main form:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM