Хорошо, так что это не совсем ясно из вопроса, но я предполагаю, что вы пытаетесь перейти с URL-адреса корневого уровня, например /posts
, на страницы для определенных категорий, таких как /category/1/posts
.
.
Причина, по которой я предполагаю, что это потому, что у меня есть вложенные маршруты (даже в пространстве имен), где will_paginate прекрасно работает без каких-либо специальных параметров. Если это не так, то, вероятно, что-то еще происходит с вашими маршрутами, и для отладки потребуется больше информации.
Однако я могу хотя бы объяснить, как работает will_paginate. Когда он генерирует URL-адреса страницы, он вызывает url_for
с существующими параметрами и конкретной необходимой страницей. Поэтому, если у вас уже есть набор параметров, он должен сохранить их, включая те, которые являются частью самого пути. К счастью, он также позволяет передавать дополнительные параметры для объединения с параметром (сюрприз!) :params
в will_paginate.
Теперь, если вы правильно настроили вложенные маршруты, /category/1/posts
можно сгенерировать:
url_for(:controller => 'posts',
:category_id => '1')
Но если вы находитесь на странице /posts
, то параметры будут только:
{:controller => 'posts'}
Так что вам нужно передать category_id в will_paginate следующим образом:
<%= will_paginate @posts, :params => {:category_id => @posts.first.category_id} %>
Если это не сработает, то я подозреваю, что с вашими маршрутами что-то не так. Попробуйте добавить в шаблон оператор отладки и вызвать url_for
с разными перестановками параметров. Помните, что порядок определения маршрута имеет значение и может создавать конфликты.