【发布时间】:2012-12-23 20:18:08
【问题描述】:
我在搜索页面上有分页(kaminari),如果我用 % 搜索类似“50% 折扣”的东西,我会得到页面 http://some.domain.com/50%25+discount,其中分页有错误的网址(没有转义 %),例如:
http://some.domain.com/50%+discount?page=2
我做错了吗?还是 gem 中的错误?
谢谢
【问题讨论】:
我在搜索页面上有分页(kaminari),如果我用 % 搜索类似“50% 折扣”的东西,我会得到页面 http://some.domain.com/50%25+discount,其中分页有错误的网址(没有转义 %),例如:
http://some.domain.com/50%+discount?page=2
我做错了吗?还是 gem 中的错误?
谢谢
【问题讨论】:
% 是 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 => /.*/
【讨论】: