Rails-向后导航时,以远程形式维护参数(搜索历史)

问题描述 投票:0回答:1

我有一个带有搜索表单的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') %>");

但是,这令人费解,好像应该有一个更好的(内置的?)解决方案。

有人知道实现这一目标的传统方法吗?如果没有,关于有效方法的任何想法都将受到赞赏。预先感谢。

ruby-on-rails ruby ajax erb
1个回答
0
投票

您可以使用request.referrer获取当前的浏览器URL并使用ruby对其进行操作。

使用ruby的完整代码应该是这样的:

index.js.erb

// 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') %>");

© www.soinside.com 2019 - 2024. All rights reserved.