2016-08-25 54 views
1

我用下面的代碼讓我的搜索頁面的Rails的link_to遠程真正的問題,當有瀏覽器的歷史

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

這一切都工作正常,並如預期我得到數據上通過JS請求數據。但是,當我點擊其他鏈接,然後點擊按鈕(由瀏覽器提供)時,它會顯示空白頁面上的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彪馬

+0

包括您的控制器和路線,以幫助我們更好地瞭解您的代碼 –

+0

@NirajanPokharel添加 –

+0

聽起來像後退按鈕將回到最後一個請求,這是來自您的'remote:true'鏈接的AJAX請求。奇。你使用什麼服務器?標準的rails dev服務器一次只能處理一個請求,可能會解決這個問題。嘗試使用'puma'作爲開發服務器並查看問題是否存在 – Killerpixler

回答

0

正如我的想法。後退按鈕轉到最後一個請求,它是JS文件。它所做的只是渲染一個部分,但由於它沒有基礎模板,所以你得到的是部分搜索數據。

我得到的AJAX partials到目前爲止的工作方式是在.html.erb文件中有一個div標記(或任何帶有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")) %>"); 

兩個refernce的部分,因爲我想渲染表數據。訣竅是在.js.erb文件中使用將innerHTML設置爲rails escape_javascript(render..)調用的語法。這種方式返回導航將從另一個頁面返回到搜索結果頁面。

試一試,讓我知道它是否有訣竅。賠率是你會得到呈現的搜索結果頁面的HTML模板,但沒有任何數據。 AJAX通常不適用於瀏覽器後退按鈕。

+0

是的瀏覽器正在跟蹤通常的鏈接訪問遠程鏈接,我試過你的代碼,但它仍然是相同的 –

+0

我找到了一種解決方法,以防止瀏覽器頁面緩存http://stackoverflow.com/questions/711418/how-to-prevent-browser-page-caching-in-rails不過,我認爲這可能是一個錯誤或什麼,因爲它是一個在rails應用程序中的常見用例 –

+0

什麼環境你是否遇到過這個問題? 「發展」還是「生產」? – Killerpixler

相關問題