You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6.1中如何将外部button_tag关联到form_with表单提交

完全可以实现,有两种常用实现方案,同时需要先修复你现有代码的一个隐含问题:
你当前把form_with直接放在<tbody>标签内不符合HTML规范,<tbody>的直接子元素仅允许为<tr>,浏览器渲染时会自动将form标签移到表格外部,导致表单结构异常,建议你将form_with移到整个<table>标签的外部,包裹整个表格。

方案1:使用HTML原生属性关联(无需额外写JS,最简便)

这种方式依赖HTML原生的按钮form属性,直接将外部按钮和指定表单绑定即可:

  1. 给form_with添加唯一的id属性:
<%= form_with(id: "delete-multiple-clients-form", url: destroy_multiple_clients_path, data: { controller: 'form-submission', form_submission_target: "delete_multiple_form" }) do |form| %>
  1. 给外部的button_tag添加form参数、指定提交类型:
<%= button_tag "Delete Selected2", type: :submit, form: "delete-multiple-clients-form", class: "btn btn-link dropdown-item", data: { action: "form-submission#destroyMultiple" } %>

配置完成后浏览器会原生识别该按钮为对应表单的提交按钮,无需放在表单内部即可正常触发提交。

方案2:通过现有Stimulus控制器提交(适合需要前置校验/额外逻辑的场景)

你已经给表单绑定了Stimulus目标,直接在控制器方法中调用表单提交即可:

// app/javascript/controllers/form_submission_controller.js
import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  static targets = ["deleteMultipleForm"]

  destroyMultiple() {
    // 可在这里添加自定义逻辑,比如删除二次确认
    // if (!confirm("确定删除选中的客户端记录吗?")) return
    this.deleteMultipleFormTarget.submit()
  }
}

该方案不需要修改按钮和表单的HTML属性,只要按钮的data-action绑定正确即可正常触发。

内容的提问来源于stack exchange,提问作者ctilley79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:09:04