假设我需要一个简单的搜索表单:
<form action="<%= search_path %>" methode="GET">
<input type="text" placeholder="where?" name="place_name" />
</form>
我需要根据输入字段生成一个url,以便显示:
/search/some-value
我试过了:
match 'search(/:place_name)', to: 'some_controller#some_action', as: 'search'
有什么建议为什么它不起作用或我在这里做错了什么?
答案 0 :(得分:0)
如果您提交表单,表单中通过输入设置的参数将使用查询参数附加到URL - 在您的情况下看起来像这样:
/search?place_name=some-value
这是基本的表单行为,除非你想使用一些Javascript来处理请求(在这种情况下我建议反对),否则没有简单的方法。
要使用默认行为,您的路线需要如下所示:
match 'search', to: 'some_controller#some_action', as: 'search'
参数place_name
将在控制器中使用:
params[:place_name]
希望这有帮助。
答案 1 :(得分:0)
以下代码支持unicode和其他参数:
get "search/*place_name" => "store#search"
get "search" => redirect {|_, req|
params = req.query_parameters
query = Rack::Utils.escape params.delete(:place_name){"%"}
"/search/#{query}#{params.to_query.prepend('?') if params.any?}"
}, as: :search