我有一个项目列表,在它上面我有一些链接可以让您过滤列表,但是在您单击这些链接一次后,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>
应用程序/资产/javascripts/items.js.coffee:
$('.filter_link').click ->
filter=$(this).data('filter')
$.ajax "items/filter/#{filter}", cache:false