Ruby on rails Rails-将多选参数合并为逗号分隔的字符串

Ruby on rails Rails-将多选参数合并为逗号分隔的字符串,ruby-on-rails,forms,select,ruby-on-rails-5,jquery-select2,Ruby On Rails,Forms,Select,Ruby On Rails 5,Jquery Select2,我有一个选择框,允许多个值,以过滤页面上的结果。选择“多个”时,提交的参数如下所示: Parameters: {"categories"=>["books", "films"], "commit"=>"Submit", "id"=>"87"} 当我返回页面时,URL为: http://localhost:3000/87/projects?categories%5B%5D=books&categories%5B%5D=films&commit=Submit 我

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

Parameters: {"categories"=>["books", "films"], "commit"=>"Submit", "id"=>"87"}
当我返回页面时,URL为:

http://localhost:3000/87/projects?categories%5B%5D=books&categories%5B%5D=films&commit=Submit
我想返回的URL是:

http://localhost:3000/87/projects?categories=books,films
如何在URL中以逗号分隔的字符串形式返回这些参数[: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的路径,路径为:get'project',to'projectreroute',as::project

您可以转到项目控制器中的重路由方法,并解析获得的数据

project_controller.rb

class ProjectController < ApplicationController
  def reroute
    redirect_to your_path(categories: params[:categories].join(','))
  end
end
这会将类别数组转换为一个字符串,其值用逗号分隔。它不再是数组了。它还可以根据需要删除&commit=Submit

如果您不喜欢rails路由方法,还可以让submit按钮运行一些JS函数,根据需要构建url字符串。例如,返回buildUrl;%%>


话虽如此,我必须说我同意Edward的评论,url编码的格式是标准的,是开箱即用的,不需要所有额外的重新路由和解析。我很确定,无论您需要什么样的数据,都可以通过正确的解析与URL编码格式一起使用。

为什么您希望它采用单独的格式?url编码的格式对我来说似乎是正确的。