【问题标题】:Generating URLs from form params in Rails从 Rails 中的表单参数生成 URL
【发布时间】:2009-09-07 18:52:35
【问题描述】:

是否可以根据表单中的值生成表单提交的 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”附加到此路由来为此添加分页。

如果这是不可能的。我也不明白为什么参数不在 url 中作为

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

据我了解,这将允许我做同样的事情

谢谢!

【问题讨论】:

    标签: ruby-on-rails webforms routes


    【解决方案1】:

    我也不明白为什么参数不在网址中

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

    据我了解,这将 请允许我做同样的事情

    来自form_tag 的文档:

    表单的方法默认为 发布。

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

    【讨论】:

    • 这是有道理的。我想既然我的路线中有这个方法,它会自动做到这一点。谢谢!
    【解决方案2】:

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

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

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

    现在,在您的问题中,我认为您是在谈论第二种情况。如果您确实想使用 GET 语句附加参数(因为表单将默认为 POST),您可以添加方法参数:

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

    附带说明,我认为您的路线过于复杂。如果你只想使用参数,你可以使用类似的东西

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

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

    祝你好运!

    顺便说一句,之前实际上并没有生成路由。 "/:client_id/"、"/:make" 和其他占位符,路由引擎将使用这些占位符检查某些路由是否响应键入的 URL,并在分配变量后执行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      相关资源
      最近更新 更多