Rails will_paginate кэширует дублирование страниц маршрутизации - PullRequest
1 голос
/ 07 декабря 2009

Я использую плагин 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?

Спасибо


UPDATE

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

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

1 Ответ

1 голос
/ 26 февраля 2010

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

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

...