从Rails中的表单参数生成URL

时间:2009-09-07 18:52:35

标签: ruby-on-rails webforms routes

是否可以根据表单中的值生成表单提交的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"

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

谢谢你!

2 个答案:

答案 0 :(得分:3)

  

我也不明白为什么params不在url中

     
    

“的client_id = ID&安培;使= MAKE&安培;模型= MODEL”

  
     

我的理解是这样的   允许我做同样的事情

来自form_tag的文档:

  

表单的方法默认为   POST。

您需要添加:method =&gt;如果您希望在查询字符串中传递选项,请“获取”form_tag选项。

答案 1 :(得分:1)

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

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

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

现在,在你的问题中,我认为你在谈论第二个案例。如果你想使用GET语句附加params(因为表单默认为POST),你可以添加方法参数:

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

作为旁注,我认为你的路线过于复杂。如果你只想使用params,你可以使用像

这样的东西
"client/:client_id/search/", :controller => "tags", :action => "make_model_search", :method => :get

您的params(:model,:make)将在您的控制器中可用,如果您想使用分页(检查will_paginate插件),它将正常工作。

祝你好运!

BTW,之前实际上并没有生成路由。 “/:client_id /”,“/:make”和其他人充当占位符,路由引擎将使用它来检查某个路由是否响应键入的URL并在分配变量后执行它。