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

如何在Rails的link_to中传递用户选择的自定义数值参数?

已知@uneaten_bananas为整数,现有Rails代码如下:

<%= link_to "Get Bag", get_bag_for_uneaten_bananas_fruitstand_index_path(id:@sale_ticket.id), remote: true %>

需求是添加范围为1至@uneaten_bananas的选择框,将选中的香蕉数量作为参数传入上述link_to,且不使用常规表单(因需批量更新多个香蕉属性)。

具体实现步骤:

  1. 添加数量选择框
    使用Rails的select_tag生成下拉选项,指定id方便JS获取选中值:

    <%= select_tag :banana_count, options_for_select(1..@uneaten_bananas), id: 'banana-count' %>
    <%= link_to "Get Bag", get_bag_for_uneaten_bananas_fruitstand_index_path(id: @sale_ticket.id), remote: true, id: 'get-bag-link' %>
    
  2. 用JS处理点击事件,拼接参数并发起AJAX请求
    通过监听链接点击事件,阻止默认跳转,获取选择框的数值后拼接至URL,再模拟remote: true的AJAX请求逻辑:

    document.addEventListener('DOMContentLoaded', function() {
      const getBagLink = document.getElementById('get-bag-link');
      const bananaCountSelect = document.getElementById('banana-count');
    
      getBagLink.addEventListener('click', function(e) {
        e.preventDefault();
        const selectedCount = bananaCountSelect.value;
        
        // 构造带参数的URL
        const targetUrl = new URL(this.href);
        targetUrl.searchParams.append('banana_count', selectedCount);
    
        // 发起符合Rails要求的AJAX请求
        fetch(targetUrl.toString(), {
          method: 'GET',
          headers: {
            'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content,
            'Accept': 'text/javascript'
          }
        })
        .then(response => response.text())
        .then(script => {
          // 执行后端返回的JS代码,保持remote: true的原有交互效果
          eval(script);
        })
        .catch(err => console.error('请求失败:', err));
      });
    });
    
  3. 后端获取参数并处理逻辑
    在对应的Controller Action中,通过params[:banana_count]获取选中的数量,执行批量更新香蕉属性的逻辑:

    def get_bag_for_uneaten_bananas
      sale_ticket = SaleTicket.find(params[:id])
      banana_count = params[:banana_count].to_i
      # 此处编写批量更新香蕉属性的逻辑
    end
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:56:12