【问题标题】:Rails - Submitting multiple forms with one submit buttonRails - 使用一个提交按钮提交多个表单
【发布时间】:2016-04-06 01:14:36
【问题描述】:

在我的应用程序中,我有一个用于编辑所有用户的页面,但是我想要它,这样我只需单击一个提交按钮即可更新用户的详细信息,但目前我只能编辑一个并单击“更新用户” ' 按钮来更改该用户的详细信息。

_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 完全没有任何作用,但我希望它能够更新所有用户的详细信息。任何帮助将不胜感激!

【问题讨论】:

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


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

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

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

    【讨论】:

    • 使提交按钮执行某些操作,但是会导致错误提示 No route matches [POST] "/admin/users/1/edit"
    • 尝试将主要形式的edit_user_path 替换为edit_users_path,我认为问题就在这里。工作了吗?
    • 不抱歉,给出未定义的局部变量错误
    • @coreypizzle 抱歉……这不是正确的控制器操作。给我一点时间来检查一下。
    • @ChangwooRhee 试试params.require(:user).permit([:attr1, { attr1: [] }, :attr2, { attr2: [] }])。一对[:attr, { attr: [] }] 适用于所有数组类型的参数。
    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 2017-05-03
    • 2011-03-20
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多