0

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

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

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

4

2 回答 2

0

如果您提交表单,则通过表单中的输入设置的参数将使用查询参数附加到 URL - 在您的情况下,这看起来像这样:

/search?place_name=some-value

这是基本的表单行为,除非您想使用一些 Javascript 来处理请求(在这种情况下我建议不要这样做),否则没有简单的方法可以解决这个问题。

但是,要使用默认行为,您的路线需要如下所示:

match 'search', to: 'some_controller#some_action', as: 'search'

然后,该参数place_name将在控制器中使用:

params[:place_name] 

希望这可以帮助。

于 2012-12-09T11:39:48.323 回答
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
于 2013-09-06T06:56:42.143 回答