2009-09-07 16 views
1

是否有可能根据表单中的值生成表单提交的url?我想创建一个要求对进行搜索的形式和模型从Rails中的表单参数生成URL

<% form_tag make_model_search_path(:client_id => @client.id) do %> 
<%= select_tag :make, options_for_select(make_list) %> 
<%= select_tag :model, options_for_select(model_list) %> 
<%= submit_tag "Search" %> 
<% end %> 

我想用的是下面的显示结果

map.make_model_search "client/:client_id/tags/search/make/:make/model/:model", :controller => "tags", :action => "make_model_search", :method => :get 

路线但由于URL之前的任何产生参数发送我不知道如何做到这一点

我希望这样做的原因是因为我需要添加分页到这个最终通过追加“page /:page”到这条路线。

如果这是不可能的。我也不明白为什么PARAMS不在URL作为

"?client_id=ID&make=MAKE&model=MODEL" 

这是我的理解是,这将让我做同样的事情

谢谢!

回答

3

我也不明白为什么PARAMS不在URL作为

“?CLIENT_ID = ID &化妆= MAKE &模型=模型”

这是我的了解到这将使我 做同样的事情

从做为form_tag

该窗体的方法默认为 POST。

如果您希望在查询字符串中传递选项,则需要将method:>“get”添加到您的form_tag选项中。

+0

这很有道理。我想,因为我的方法在我的路线上,它会自动做到这一点。谢谢! – stellard 2009-09-07 20:06:26

1

使用“client /:client_id/tags/search /”主要是Rails用于处理路由的REST方法。在这个视图中,你正在访问资源的表示(比如说一个客户端)。

“?client_id = ID”方式只是发送一些参数。

因此,在第一种情况下,您明确要求客户端的表示形式,而在第二种情况下,您不知道发生了什么。这是表达和请求信息的一种更简单的方式。

现在,在你的问题中,我想你是在谈论第二种情况。如果你想追加使用GET语句(因为形式将默认为POST)的参数,可以,你可以添加一个方法PARAM:

form_tag make_model_search_path(:client_id => @client.id), :method => "get" 

作为一个方面说明,我认为你是在你的路径变得复杂。如果你只是想使用参数,可以你可以只用一些工作像

"client/:client_id/search/", :controller => "tags", :action => "make_model_search", :method => :get 

您的PARAMS(:模型:MAKE)会在你的控制器可用,如果你想使用分页(检出will_paginate插件)它会正常工作。

祝你好运!

顺便说一下,这些路线实际上并没有生成过。 “/:client_id /”,“/:make”和其他作为占位符,路由引擎将用它来检查某些路由是否响应类型化的URL并在分配变量后执行它。