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