Rails - объединение нескольких параметров в строку через запятую

У меня есть поле выбора, которое позволяет несколько значений, чтобы отфильтровать результаты на странице. Когда я выбираю несколько, представленные параметры выглядят так:

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

Как я могу вернуть эти params[:categories] в виде разделенной запятыми строки в URL? Кроме того, возможно ли удалить «& commit = Submit» из URL?

Вот мой полный код формы:

  <%= 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' %>

Всего 1 ответ


Есть пара JS & 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

Это преобразует ваш массив категорий в строку с вашими значениями, разделенными запятыми. Это больше не массив. и он также удаляет «& commit = Submit», как вы хотели.

Если вам не нравится метод маршрутизации rails, вы также можете сделать кнопку отправки для запуска некоторых функций JS, которые строят строку url так, как вы этого хотите. Например, <%= submit_tag , :onclick => "return buildUrl();" %> <%= submit_tag , :onclick => "return buildUrl();" %>

Сказав это, я должен сказать, что я согласен с комментарием Эдварда, кодированный в формате url формат является стандартным и работает «из коробки», нет необходимости во всех дополнительных маршрутизации и разборе. Я уверен, что все, что вам нужно для данных, может быть использовано с форматированием в кодировке URL с правильным анализом.


Есть идеи?

10000