导轨 - 将多选参数合并为逗号分隔的字符串



我有一个允许多个值的选择框来过滤页面上的结果。当我选择多个时,提交的参数如下所示:

Parameters: {"categories"=>["books", "films"], "commit"=>"Submit", "id"=>"87"}

当我返回到页面时,URL 是:

http://localhost:3000/87/projects?categories%5B%5D=books&categories%5B%5D=films&commit=Submit

我想返回的网址是:

http://localhost:3000/87/projects?categories=books,films

如何在 URL 中将这些params[:categories]作为逗号分隔的字符串返回?另外,是否可以从URL中删除"&commit=Submit"?

这是我的完整表单代码:

<%= form_with url: project_path(@project), local: true, method: :get, skip_enforcing_utf8: true do |form| %>
<%= form.select(:categories, @categories.map {|category| [category.name,category.slug]}, options = { selected: params[:categories], include_blank: "Select Categories", include_hidden: false }, html_options = { multiple: true }) %>
<%= form.submit 'Submit' %>

有几种JS和Rails方法可以做你想做的事。我只能使用rails想到一个快速简便的方法:将您获得的URL重定向到另一条路由,并根据需要进行数据解析。像这样 -->

假设这是您通往project_path的路线:get 'project', to: 'project#reroute', as: :project

您可以在project控制器中转到reroute方法并解析您获得的数据。

project_controller.rb

class ProjectController < ApplicationController
def reroute
redirect_to your_path(categories: params[:categories].join(','))
end
end

这会将您的类别数组转换为一个字符串,其中的值用逗号分隔。它不再是一个数组。它还会像您想要的那样删除"&commit=提交"。

如果你不喜欢 rails 路由方法,你也可以让你的提交按钮运行一些 JS 函数,根据需要构建 url 字符串。例如<%= submit_tag , :onclick => "return buildUrl();" %>

话虽如此,我必须说我同意 Edward 的评论,url 编码格式是标准的,开箱即用,不需要所有额外的重新路由和解析。我很确定您需要数据的任何内容都可以与 URL 编码格式一起使用并进行适当的解析。

最新更新