рельсы 3: будет разбивать на страницы, создавая неправильные ссылки - PullRequest
0 голосов
/ 10 марта 2011

Это мой маршрут

match "/search/*keywords" => "public/search#index" ,:method=>:get,    :as=>:search_with_keywords    

Примером может быть "/ search / country-india / product_type-mobilephones"

Я использую функцию paginate для создания ссылок на страницы
* / ключевые слова вызывают следующую проблему при создании ссылки на страницы

<%= will_paginate @results, :container => false, :class => 'pagination ajax' %>  

сгенерированная ссылка "http://localhost:3000/search?keywords=country-india%2Fproduct_type-mobilephones&lang=en&page=2"

что я хочу, это "http://localhost:3000/search/country-india/product_type-mobilephones?lang=en&page=2"

как мне этого добиться ...

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Вас также может заинтересовать использование Kaminari в качестве альтернативы will_paginate для Rails 3. Я обнаружил его с помощью Railscast и смог быстро и эффективно интегрировать его в мое приложение.Я также обнаружил, что размер моего приложения уменьшился, а производительность заметно возросла после переключения.

2 голосов
/ 24 марта 2011

Если вы используете версию Will Paginate для Rails 3 (в настоящее время "3.0.pre2"), вы можете использовать опцию :renderer и настроить способ генерации ссылок.

Итак, во-первых, есливы не в курсе, тогда вы можете следовать инструкциям по установке и инструкции по использованию из будет разбивать страницы на вики .

Затем в lib вы можете создать свой собственный рендер, который будет перезаписыватьгенерация ссылки, возможно, что-то вроде

class SearchLinkRenderer < WillPaginate::ViewHelpers::LinkRenderer

  protected

  def url(page)

    @base_url_params ||= begin
      url_params = base_url_params
      merge_optional_params(url_params)
      url_params
    end

    url_params = @base_url_params.dup
    add_current_page_param(url_params, page)

    @template.search_with_keywords_url(url_params)
  end
end

, а затем вызовите ее с помощью

<%= will_paginate @results, :container => false, :class => 'pagination ajax', :renderer => SearchLinkRenderer %>

Средство рендеринга по умолчанию использует

@template.url_for(url_params)

, что «портит»ваши ссылки.Вы можете использовать любой путь от @template, так что

@template.search_with_keywords_url(url_params)

должно сработать.Теперь, если вы вызовете will_paginate со своим собственным рендерером, он должен пройти, используя ваш путь вместо url_for, и параметры должны хорошо совпадать.Если они не проверят то, что url_params установлено, и сравните его с вашими сопоставителями маршрутов.

Возможно, есть более простой способ переписать это, но это казалось довольно простым и согласуется с тем, как ожидает will_paginateВы можете настроить его вывод.Я обнаружил, что у Роба Андертона есть отличная статья о настройке will_paginate здесь , так что, возможно, они могут предложить больше понимания.

...