2013-05-28 2 views
1

У меня есть список элементов и выше. У меня есть несколько ссылок, которые позволяют вам фильтровать список, но после того, как вы нажмете эти ссылки один раз, WebBrick возвращает 304 Not Modified. Элементы в списке могут быть изменены в списке, и поэтому эти ссылки фильтра отображают устаревшую информацию. На мой взгляд выглядит следующим образом:Rails кэширование remote 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 выполнить запрос ajax с установленным кешем в значение false:

приложение/просмотров/элементы/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 
+0

Действительно ли это действие контроллера? ссылки не имеют имени контроллера –

+0

Он каждый раз нажимает на контроллер (WebBrick выводит SQL, который он выполняет), но возвращает 304 ответ на браузер. Атрибут контроллера не требуется. –

ответ

0

Я использую kaminari gem для пагинацией и у них есть опция для remote = true. Затем происходит то, что он создает удаленный канал link_to, а также добавляет случайное число к URL-адресу, так что WebBrick не возвращает кэшированную страницу. URL-адрес выглядит примерно так: http://youdomain.com/your/path?_=1518477167725 Я предполагаю, что это число в конце - это time_stamp. Поскольку URL-адрес никогда не будет соответствовать URL-адресу в кеше, он заставит его перезагрузить.

Вы можете сделать что-то подобное в своем link_to, так что вы можете по-прежнему пользователь remote=true и не нуждаетесь в пользовательских ajax.

Смежные вопросы