Rails - 将多选参数合并为逗号分隔的字符串
Posted
技术标签:
【中文标题】Rails - 将多选参数合并为逗号分隔的字符串【英文标题】:Rails - Merge Multi-Select Params into comma-separated string 【发布时间】:2020-05-03 23:12:03 【问题描述】:我有一个允许多个值的选择框来过滤页面上的结果。当我选择多个时,提交的参数如下所示:
Parameters: "categories"=>["books", "films"], "commit"=>"Submit", "id"=>"87"
当我返回页面时,网址是:
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' %>
【问题讨论】:
您为什么希望它采用单独的格式? url 编码格式对我来说似乎是正确的。 【参考方案1】:有几种 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=Submit”。
如果你不喜欢 rails 路由方法,你也可以让你的提交按钮运行一些 JS 函数来构建你想要的 url 字符串。例如<%= submit_tag , :onclick => "return buildUrl();" %>
话虽如此,我必须说我同意 Edward 的评论,url 编码格式是标准的并且开箱即用,不需要所有额外的重新路由和解析。我很确定您需要的任何数据都可以通过正确的解析与 URL 编码格式一起使用。
【讨论】:
以上是关于Rails - 将多选参数合并为逗号分隔的字符串的主要内容,如果未能解决你的问题,请参考以下文章