0

検索ページにpaginate(kaminari)があり、「50%割引」のように%で検索すると、次のようhttp://some.domain.com/50%25+discountにpaginateのURLが間違っている(%をエスケープせずに)ページが 表示されます。http://some.domain.com/50%+discount?page=2

私は何か間違ったことをしますか?それとも宝石のバグですか?

ありがとうございました

4

2 に答える 2

0

%は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ヘルパーとロジックが機能します。

于 2012-12-21T20:08:58.320 に答える
0

私の解決策は

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

route.rb私は持っています

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

于 2012-12-23T12:18:08.520 に答える