Rails will_paginate пользовательский маршрут

Как я могу использовать will_paginate с пользовательским маршрутом?

У меня есть следующие в моих маршрутах:

map.connect 'human-readable/:name', :controller => :tags, :action => 'show'

но насколько я могу судить, will_paginate использует url_for, но я хочу использовать "удобочитаемый для человека" вместо url_for, но как?

редактировать

Когда я нажимаю на ссылку подкачки, созданную will_paginate, он использует:

"tags/show?name=Elektronikindustri&page=1"

Вместо:

"/human-readable/show?name=Elektronikindustri&page=1"

я хочу will_paginate использовать мой собственный маршрут вместо фактического имени контроллера

3 ответа

Решение

will_paginate view helper has a :params option for overriding the default link generation.

Change your routes configuration:

map.human_readable_tag '/human-readable/:name', 
     :controller => :tags, :action => 'show'

Вызвать will_paginate view helper as follows:

<%= will_paginate @tag_list, 
     :params => {:controller => human_readable_tag_path(@tag_name) } %>

Убедитесь, что вы установили @tag_name variable in your controller.

For more information read the will_paginate view helper documentation.

:params option passed to the helper is used to invoke url_for, So read the url_for documentation for how we faked a controller name.

Другой вариант - использовать param в will_paginate, но передать параметр следующим образом:

<%= will_paginate @products, :params => {:controller => 'human-readable', :action => 'show', :name => 'xyz'} %>

и теперь ваши ссылки будут выглядеть как удобочитаемые /xyz?page=2...

Вы должны определить этот маршрут тоже


map.connect 'human-readable/:name', :controller => :tags, :action => 'show'
map.connect 'human-readable/:name/page/:page', :controller => :tags, :action => 'show'

Другие вопросы по тегам