Rails - поддерживать параметры (историю поиска) в удаленной форме при переходе назад - PullRequest
0 голосов
/ 25 октября 2019

У меня есть индекс Rails 5 с формой поиска, которая фильтрует результаты.

Указанная форма использует remote: true, чтобы поразить контроллер, обновляет результаты, использует соответствующий файл index.js.erb для обновленияКонтейнер результатов.

Проблема, которую я решаю, состоит в том, что нажатие на результат с последующим переходом назад не поддерживает предыдущий поиск.

Я исправил это, используя следующее в index.js.erb:

// new fields to update the history
const url = new URL(window.location);
url.searchParams.set('query', '<%= params[:query] %>');
url.searchParams.set('query_sort', '<%= params[:query_sort] %>');
window.history.pushState(null, null, url);

// existing code to update the results
$('#container').replaceWith("<%= escape_javascript(render partial: 'partial') %>");

Однако это кажется запутанным и, как будто должно быть лучшее (встроенное?) Решение.

Кто-нибудь знает об обычном способе достижения этого? Если нет, то любые идеи по эффективному подходу очень ценятся. Заранее спасибо.

1 Ответ

0 голосов
/ 25 октября 2019

Вы можете использовать request.referrer для получения текущего URL браузера и манипулирования этим с помощью ruby.

Полный код с использованием ruby ​​должен выглядеть примерно так:

index.js. эрб

// new fields to update the history
<%
  url = request.referrer
  uri = URI.parse(url)

  query = Rack::Utils.parse_query(uri.query)
  query['query'] = params[:query]
  query['query_sort'] = params[:query_sort]

  uri.query = Rack::Utils.build_query(query)
%>

window.history.pushState(null, null, '<%= uri.to_s %>');

// existing code to update the results
$('#container').replaceWith("<%= escape_javascript(render partial: 'partial') %>");

...