使用浏览器历史记录时,Rails link_to remote true问题

时间:2016-08-25 12:51:45

标签: javascript ruby-on-rails ajax

我使用以下代码通过我的搜索页面上的JS请求获取数据

<%= link_to 'All', '/search?type=all', id: 'active', remote: true %>
<%= link_to 'Photographers', '/search?type=photographers', remote: true %>

一切正常,我按预期获得数据。但是当我点击其他链接然后点回按钮(由浏览器提供)时,它会在空白页面上显示JS请求数据而不是返回搜索页面。

是否有解决方法或修复此问题?

在routes.rb

resources :search, only: [:index]
搜索控制器中的

def index
  // search processing

  respond_to do |format|
    format.html
    format.js
  end
end

搜索/ index.js.erb的

$('#search-area').html("<%= j render partial: 'search_area' %>");

我正在使用Rails 5.0和Puma

1 个答案:

答案 0 :(得分:0)

正如我想的那样。后退按钮转到最后一个请求,即JS文件。它所做的全部是渲染部分,但由于它没有基本模板,所以你得到的是来自部分的搜索数据。

到目前为止,让AJAX部分工作的方法是在div文件中添加.html.erb标记(或任何具有ID的标记)。例如,来自具有AJAX可排序表的项目:

index.html.erb

...
<div class="card card-block" id="article-index">
    <%= render 'indextable' %>
</div>
...

index.js.erb

$("#article-index").html("<%= escape_javascript(render("indextable")) %>");

对于我想渲染的表数据,它们都是部分引用。诀窍在.js.erb文件中,使用将innerHTML设置为rails escape_javascript(render..)调用的语法。这样,返回导航将从另一个页面返回到搜索结果页面。

尝试一下,让我知道它是否成功。可能的情况是,您将获得呈现的搜索结果页面的HTML模板,但没有任何数据。 AJAX通常不能与浏览器后退按钮一起使用。