Неверный URL в пагинации (kaminari) для поиска с %

У меня есть разбивка на страницы (kaminari) на странице поиска, и если я ищу что-то с%, например «скидка 50%», я получаю страницу http://some.domain.com/50%25+discount, где разбивка на страницы имеет неправильные URL-адреса (без экранирования%), например: http://some.domain.com/50%+discount?page=2

Я делаю что-то не так? Или это ошибка в геме?

Спасибо


person Alexey    schedule 21.12.2012    source источник


Ответы (2)


% - это специальный символ в URL-адресах, не так ли? Вам понадобится ваш метод поиска, чтобы очистить запрос, прежде чем он будет передан URL-адресу.

Я считаю, что вы можете использовать методы класса String, предоставленные в gem Stringex, для очистки поискового запроса.

https://github.com/rsl/stringex

Оттуда страница github.

"10% off if you act now".to_url => "10-percent-off-if-you-act-now"

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

Вам нужно будет что-то вроде этого (это не очень чисто, но дает вам представление)

class SearchesController < ApplicationController
  def new
     #Form in its view that goes to create via json
  end

  def create
     query = params[:query].to_url
     redirect_to "/search/#{query}"
  end

  def show
    #search paged on params[:query]
  end

end

маршруты

resources :searches, :only => [:new, :create, :show], :new => ""
get "/search" => "searches#new", :via => :get

Вы бы вели себя так, будто относитесь к нему как к обычному объекту, но на самом деле никогда его не сохраняете. Вы даже можете изменить имя метода :create для разбора, если хотите, но таким образом встроенные помощники и логика rails будут работать.

person rovermicrover    schedule 21.12.2012
comment
Спасибо за вариант решения. Может быть, я воспользуюсь им, если ошибка не будет исправлена ​​​​в течение нескольких дней. - person Alexey; 22.12.2012
comment
попробуйте найти скидку 10%, если вы сейчас действуете в Google, это нормально, чтобы избежать этого запроса. - person Alexey; 22.12.2012
comment
Это больше метакод, но да, в этом весь смысл. И это не баг каминари. % небезопасны в URL-адресах. Таким образом, передача одного URL-адреса вызовет проблемы, поэтому вам нужно как-то сделать его безопасным, как указано выше. - person rovermicrover; 22.12.2012

Мои решения

paginate @entities, :params => { :keyword => CGI.escape(@keyword) }

в route.rb у меня есть

match "/:keyword" => "route#index", :keyword => /.*/

person Alexey    schedule 23.12.2012