我有一個項目列表及其上方我有幾個鏈接,允許您過濾列表,但是當您單擊這些鏈接一次後,WebBrick返回304 Not Modified。列表中的項目可以在列表中更改,因此這些篩選器鏈接顯示過時的信息。我的看法是這樣的:Rails遠程緩存link_to
應用程序/視圖/項目/ index.html.erb:
<%= link_to 'All', {action:'filter', filter:'all'}, remote:true %>
<%= link_to 'To Buy', {action:'filter', filter:'to_buy'}, remote:true %>
<div id="items">
<%= render 'items' %>
</div>
WebBrick在開發模式下運行,以便緩存不應該被打開。我可以將該方法設置爲除GET之外的其他方法,但從技術上講這是不正確的。有沒有任何選項可以確保link_to不返回緩存的內容?我使用的是Rails 3.2.13。
應用程序/控制器/ items_controller.rb:
def filter
case params[:filter]
when 'to_buy' then
@items=Item.where('to_buy=?', true)
when 'all' then
@items=Item.all
end
end
應用程序/視圖/項目/ filter.js.erb:
$('#items').html("<%=j render 'items' %>");
UPDATE
我可以在唯一的解決辦法拿出來是把link_tos變成普通的HTML鏈接,並讓JQuery做緩存設置爲false的ajax請求:
應用程序/視圖/項目/ index.html.erb:
<a href="javascript:;" class="filter_link" data-filter="all">All</a>
<a href="javascript:;" class="filter_link" data-filter="to_buy">To Buy</a>
應用程序/資產/ Java腳本/ items.js.coffee:
$('.filter_link').click ->
filter=$(this).data('filter')
$.ajax "items/filter/#{filter}", cache:false
它是否真的觸及控制器操作?鏈接沒有控制器名稱 – 2013-05-28 10:09:41
它每次都擊中控制器(WebBrick輸出正在執行的SQL),但是會向瀏覽器返回304響應。控制器屬性不是必需的。 –