2012-12-21 18 views
0

我在頁面上有頁面(kaminari),如果我搜索%像「50%折扣」的東西我得到頁http://some.domain.com/50%25+discount其中頁面錯誤的URL(沒有轉義% )像: http://some.domain.com/50%+discount?page=2在頁面錯誤的網址(kaminari)搜索與%

我做錯了什麼?或者它是寶石中的錯誤?

謝謝

回答

0

我的解決方案是

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

route.rb

我有

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

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 helper和logic可以工作。

+0

感謝您的解決方案的變體。可能是我會使用它,如果錯誤不會在幾天內修復。 – Alexey

+0

嘗試在谷歌搜索「如果你現在採取行動10%」,它正常逃避這個查詢 – Alexey

+0

它的更多的元代碼,但是這是多數民衆贊成的整點。而且它不是kaminari的缺陷。 %在網址中不安全。因此,將一個URL傳遞給URL會導致問題,所以你必須使它像上面那樣安全。 – rovermicrover