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

Ruby on Rails中如何在HTML select标签内使用link_to调用控制器

你原代码中在<option>标签内嵌套link_to生成链接的写法是无效的,浏览器不支持在下拉选项中嵌入可点击的超链接,以下是两种可直接落地的实现方案:

直接把请求路径作为option的value,通过下拉框的change事件触发跳转,无需额外引入依赖,新手可直接复用:

<td scope="row">
  <select class="form-select" onchange="if (this.value) window.location.href = this.value;"> 
    <option value="<%= workspace_member_disposition_path(@workspace.id, guest, "undecided") %>" selected="selected">Undecided</option>
    <option value="<%= workspace_member_disposition_path(@workspace.id, guest, "should_delete") %>">Delete Member</option>
    <option value="<%= workspace_member_disposition_path(@workspace.id, guest, "make_member") %>">Convert Guest to Full Member</option>
  </select>
</td>

如果你的项目是Rails 7+ 且开启了Turbo,想要实现无整页刷新的体验,把onchange属性里的window.location.href = this.value替换为Turbo.visit(this.value)即可。

方案2:表单提交方案(符合Rails安全规范)

修改数据的操作使用GET请求存在误触发风险(比如爬虫爬取链接时可能直接执行删除/转换操作),推荐用表单提交的POST/PUT请求实现:

<td scope="row">
  <%= form_with url: workspace_member_disposition_path(@workspace.id, guest), method: :put do |form| %>
    <%= form.select :disposition, 
      [["Undecided", "undecided"], ["Delete Member", "should_delete"], ["Convert Guest to Full Member", "make_member"]],
      selected: "undecided",
      class: "form-select",
      onchange: "this.form.requestSubmit()" %>
  <% end %>
</td>

控制器侧可以通过params[:disposition]获取用户选中的操作类型,适配你原有逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:48:00