我有一个带有搜索表单的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') %>");
但是,这令人费解,好像应该有一个更好的(内置的?)解决方案。
有人知道实现这一目标的传统方法吗?如果没有,关于有效方法的任何想法都将受到赞赏。预先感谢。
您可以使用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') %>");