Rails 6.1 将 submit_tag 链接到 form_with

Posted

技术标签:

【中文标题】Rails 6.1 将 submit_tag 链接到 form_with【英文标题】:Rails 6.1 Link submit_tag to form_with 【发布时间】:2021-10-26 20:14:01 【问题描述】:

我有一个 html 表,其中的表行是通过部分生成的。部分包含在 form_with 中,因此我可以使用复选框删除多条记录。问题是我希望我的 button_tag 在 form_with 块之外。是否可以将 button_tag 链接到表单,使其不必位于表单块内?

下拉操作菜单

<div class="dropdown">
  <button class="btn btn-secondary dropdown-toggle" type="button" id="actionMenuToggle" data-bs-toggle="dropdown" aria-expanded="false">Actions</button>
  <ul class="dropdown-menu" aria-labelledby="actionMenu">
    <li><%= button_tag "Delete Selected2", class: "btn btn-link dropdown-item", data:  action: "form-submission#destroyMultiple"  %></li>
  </ul>
</div>

然后,我像往常一样编码我的表格骨架,我的行呈现以下部分

<%= render partial: "client_table", clients: @clients %>

在那部分我有我的 form_with 标记并循环遍历客户端

<tbody id="clients">
<%= form_with(url: destroy_multiple_clients_path, data:  controller: 'form-submission', form_submission_target: "delete_multiple_form" ) do |form| %>
  <% @clients.each do |client| %>
    <tr>
      <td><%= check_box_tag("client_ids[]", client.id, false,  class: "form-check-input", onclick: "onClientSelect();" ) %></td>
      <td><%= client.id %></td>
      <td><%= client.name %></td>
      <td><%= client.city %></td>
      <td><%= client.state_province %></td>
      <td><%= client.postal_code %></td>
      <td><%= link_to 'Edit', edit_client_path(client), class: "btn btn-success edit_client" %> </td>
    </tr>
  <% end %>
<% end %>
</tbody>

【问题讨论】:

【参考方案1】:

只需将form: 'id_of_form' 添加到提交标签,然后在form_with .... id:'id_of_form' 上添加一个id

【讨论】:

【参考方案2】:

表单不能是table, tbody or tr 的子级。

因此,您需要将整个表格包装在 form_with 块中。如果是这种情况,将按钮包含在表单中可能会更容易,只需将表格和表格标题元素包装在表单中即可。

(但请注意,您不能嵌套表单对象)

【讨论】:

以上是关于Rails 6.1 将 submit_tag 链接到 form_with的主要内容,如果未能解决你的问题,请参考以下文章

submit_tag 在 rails4 视图中无法使用正确的 css

如何通过 Webpacker 使用 Rails 6.1 安装 Alpine JS 3

Rails 6.1 如何将文件渲染到页面模板中

将多个字段与组相加会返回错误的金额(Rails 6.1)

如何修复弃用警告:类级别方法将不再继承 Rails 6.1 中的范围?

Rails 6.1:Heroku 上的作业将使用 Async 而不是 Sidekiq