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 字符串。例如&lt;%= submit_tag , :onclick =&gt; "return buildUrl();" %&gt;

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

【讨论】:

以上是关于Rails - 将多选参数合并为逗号分隔的字符串的主要内容,如果未能解决你的问题,请参考以下文章

将多行中的文本合并为一行(作为逗号分隔的字符串)

将字符串数组合并为逗号分隔的字符串(foreach)

将逗号分隔的字符串转换为数组[重复]

用逗号分隔 Tridion 多值字段的最快方法

在 ORACLE 中,有没有办法使用两个表将多行行连接成一个行,其中最终值用逗号分隔?

导轨 5.2 | Select2 多个逗号分隔的参数