如何在Rails的link_to中传递用户选择的自定义数值参数?
实现方案:在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,且不使用常规表单(因需批量更新多个香蕉属性)。
具体实现步骤:
添加数量选择框
使用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' %>用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)); }); });后端获取参数并处理逻辑
在对应的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
相关产品推荐
相关产品推荐

