我在頁面上有頁面(kaminari),如果我搜索%像「50%折扣」的東西我得到頁http://some.domain.com/50%25+discount
其中頁面錯誤的URL(沒有轉義% )像: http://some.domain.com/50%+discount?page=2
在頁面錯誤的網址(kaminari)搜索與%
我做錯了什麼?或者它是寶石中的錯誤?
謝謝
我在頁面上有頁面(kaminari),如果我搜索%像「50%折扣」的東西我得到頁http://some.domain.com/50%25+discount
其中頁面錯誤的URL(沒有轉義% )像: http://some.domain.com/50%+discount?page=2
在頁面錯誤的網址(kaminari)搜索與%
我做錯了什麼?或者它是寶石中的錯誤?
謝謝
我的解決方案是
paginate @entities, :params => { :keyword => CGI.escape(@keyword) }
route.rb
我有
match "/:keyword" => "route#index", :keyword => /.*/
%是在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可以工作。
感謝您的解決方案的變體。可能是我會使用它,如果錯誤不會在幾天內修復。 – Alexey
嘗試在谷歌搜索「如果你現在採取行動10%」,它正常逃避這個查詢 – Alexey
它的更多的元代碼,但是這是多數民衆贊成的整點。而且它不是kaminari的缺陷。 %在網址中不安全。因此,將一個URL傳遞給URL會導致問題,所以你必須使它像上面那樣安全。 – rovermicrover