Rails缓存远程link_to

时间:2013-05-28 09:20:37

标签: ruby-on-rails

我有一个项目列表及其上面我有一些链接允许您过滤列表但是在您点击这些链接一次后,WebBrick返回304 Not Modified。列表中的项目可以在列表中更改,因此这些过滤器链接显示过期信息。我的观点如下:

应用程序/视图/项目/ 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' %>");

更新

我能想到的唯一解决方案是将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>

应用程序/资产/ Javascript角/ items.js.coffee:

$('.filter_link').click ->
  filter=$(this).data('filter')
  $.ajax "items/filter/#{filter}", cache:false

1 个答案:

答案 0 :(得分:0)

我正在使用kaminari gem进行分页,并且他们可以选择remote = true。然后会发生的是它生成一个link_to remote,并在URL上附加一个随机数,这样WebBrick就不会返回缓存页面。 该网址如下所示:select * from table1 t lateral view inline(cmap) a; 我假设最后这个数字是time_stamp。由于url永远不会匹配缓存中的url,因此会强制重新加载。

您可以在link_to中执行以下操作,因此您仍然可以使用{{1}}并且不需要自定义ajax。