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

Ruby on Rails中如何将collection_select选中值传至控制器

解决Ruby on Rails中collection_select选中值传递为命名参数的问题

你现在的问题是collection_select选中值无法动态更新到Execute链接的submod参数里——因为link_to是服务器渲染时生成的静态URL,需要用JS动态修改链接参数来实现需求,按以下步骤修改即可:

1. 给执行链接添加ID标识

修改局部视图里的link_to,加上id属性方便JS定位元素:

<% @modName = locals[:moduleName] %>
<% @id = locals[:id] %>

<%= form_with url: admin_command_path() do |f| %>
    <%= collection_select(@refcode, :Code, Command.where(FLD: @modName), :Code, :Definition, {prompt: true}, {:onchange => "updateSubMod(this.value)"}) %>
    <br /><br />
    <button class="btn_new">
        <%= link_to "Execute", new_admin_command_path(mod: @modName, submod: @refcode, id: @id), id: "execute-link" %>
    </button>
<% end %>

2. 改写JS函数动态更新链接参数

修改updateSubMod函数,利用URL API更新submod参数值:

<script>
    function updateSubMod(Code) {
        const executeLink = document.getElementById('execute-link');
        const url = new URL(executeLink.href);
        // 将submod参数替换为当前选中的Code值
        url.searchParams.set('submod', Code);
        // 把更新后的URL赋值回链接
        executeLink.href = url.toString();
    }
</script>

原理说明

  • 页面渲染时,link_to生成的是固定URL,携带的是初始的submod值(即@refcode)
  • 当collection_select选中值变化时,JS通过URL对象解析当前链接,修改查询参数中的submod为最新选中值
  • 点击Execute按钮时,跳转的URL就会携带实时选中的submod参数传给控制器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:18:13