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

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

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 Ответ

1 голос
/ 17 января 2020

Есть пара JS и Rails способ сделать то, что вы хотите. Я могу придумать быструю и простую, используя только рельсы: перенаправление получаемого вами URL на другой маршрут с разбором данных по вашему желанию. Вот так ->

Предполагая, что это ваш маршрут к путь_проекта : get 'project', to: 'project#reroute', as: :project

Вы можете go к вашему 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();" %>

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

...