Rails will_paginate маршрутизирует кэширование дубликатов страниц

Я использую плагин will_paginate.

Чтобы сгенерировать маршруты, которые я могу кэшировать (/posts/index/2 вместо /posts?page=2), я добавил следующее в свой route.rb:

map.connect '/posts/index/1', :controller => 'redirect', :url => '/posts/'  

map.connect 'posts/index/:page',
          :controller => 'posts',
          :action => 'index',
          :requirements => {:page => /\d+/ },
          :page => nil

Первая строка перенаправляет /posts/index/1 на /posts/ с помощью контроллера перенаправления, чтобы избежать дублирования страницы.

Что-то не так с тем, как я настроил правило 'posts/index/:page'?

Я думал, что добавление :requirements => {:page => /\d+/ } гарантирует, что /post/index/ без параметра :page не будет работать, но /posts/index.html кэшируется.

Как я могу перенаправить /posts/index/ на /posts/, чтобы избежать одновременного использования /posts.html и /posts/index.html?

Спасибо


ОБНОВИТЬ

я просто добавил

map.connect '/posts/index/', :controller => 'redirect', :url => '/posts/'

И у меня больше не будет дубликатов страниц.

Однако я до сих пор не понимаю, почему я получал /posts/index.html. Приветствуются любые пояснения или предложения, как сделать это правило более лаконичным ;)!

map.connect '/posts/index/1', :controller => 'redirect', :url => '/posts/'  
map.connect '/posts/index/', :controller => 'redirect', :url => '/posts/'
map.connect 'posts/index/:page',
          :controller => 'posts',
          :action => 'index',
          :requirements => {:page => /\d+/ },
          :page => nil

person deb    schedule 07.12.2009    source источник


Ответы (1)


Здесь я нашел возможный ответ на ваш вопрос.

Я думаю, что добавление :page => nil может переопределить предыдущее условие. Так что, возможно, когда вы удалите эту часть, она будет работать так, как вы ожидали.

person klew    schedule 26.02.2010
comment
Спасибо, я обязательно попробую и вернусь, чтобы обновить эту тему. - person deb; 27.02.2010