将搜索字段输入转换为url

时间:2012-12-09 10:20:37

标签: ruby-on-rails ruby-on-rails-3 rails-routing

假设我需要一个简单的搜索表单:

<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'

有什么建议为什么它不起作用或我在这里做错了什么?

2 个答案:

答案 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