検索ページにpaginate(kaminari)があり、「50%割引」のように%で検索すると、次のようhttp://some.domain.com/50%25+discount
にpaginateのURLが間違っている(%をエスケープせずに)ページが
表示されます。http://some.domain.com/50%+discount?page=2
私は何か間違ったことをしますか?それとも宝石のバグですか?
ありがとうございました
検索ページにpaginate(kaminari)があり、「50%割引」のように%で検索すると、次のようhttp://some.domain.com/50%25+discount
にpaginateのURLが間違っている(%をエスケープせずに)ページが
表示されます。http://some.domain.com/50%+discount?page=2
私は何か間違ったことをしますか?それとも宝石のバグですか?
ありがとうございました
%はURLの特殊文字ですね。クエリがURLに渡される前に、クエリをサニタイズするための検索メソッドが必要になります。
gem Stringexで提供されているStringクラスのメソッドを使用して、検索語をサニタイズできると思います。
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ヘルパーとロジックが機能します。
私の解決策は
paginate @entities, :params => { :keyword => CGI.escape(@keyword) }
route.rb
私は持っています
match "/:keyword" => "route#index", :keyword => /.*/