【问题标题】:Rails - maintain params (search history) with remote form when navigating backRails - 导航返回时使用远程表单维护参数(搜索历史)
【发布时间】:2019-10-25 10:27:56
【问题描述】:

我有一个 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】:

    您可以使用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') %>");
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 2018-08-07
      • 2015-05-13
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多