我有一个允许多个值的选择框来过滤页面上的结果。当我选择多个时,提交的参数如下所示:
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 编码格式一起使用并进行适当的解析。