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

问题描述 投票:0回答:1

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

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中以逗号分隔的字符串形式返回这些params[:categories]?另外,是否可以从网址中删除“&commit =提交”?

这是我的完整表单代码:

  <%= 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' %>
ruby-on-rails forms select ruby-on-rails-5 jquery-select2
1个回答
0
投票

有两种JS&Rails方式可以完成您想要的事情。我可以想到一种仅使用rails的快速简便的方法:将您要访问的URL重定向到另一条路由,并根据需要解析数据。像这样->

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

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

project_controller.rb

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

这会将您的categorys数组转换为一个字符串,其值之间用逗号分隔。 不再是数组。,并且还会根据需要删除“&commit =提交”。

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

话虽如此,我必须说我同意爱德华的评论,URL编码格式是标准的,并且是开箱即用的,不需要所有其他重新路由和解析。我非常确定,无论您需要什么数据,都可以将其与经过适当解析的URL编码格式一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.