gpt4 book ai didi

ruby-on-rails - 使用带有参数和 form_tag 的命名路由

转载 作者:行者123 更新时间:2023-12-04 15:05:10 24 4
gpt4 key购买 nike

我正在尝试在 Rails 中创建一个简单的搜索表单,但我想我错过了一些东西。

我有一个命名的搜索路线:

map.search ":first_name/:last_name", :controller => "home", :action => "search"

我试图在我的搜索表单中使用它:
<% form_tag(search_path, :method => 'get') do %>
<%= text_field_tag(:first_name) %>
<%= text_field_tag(:last_name) %>
<%= submit_tag("Search") %>
<% end %>

但是当我加载搜索表单时,我得到一个 ActionController::RoutingError:

search_url failed to generate from {:action=>"search", :controller=>"home"} - you may have ambiguous routes, or you may need to supply additional parameters for this route. content_url has the following required parameters: [:first_name, :last_name] - are they all satisfied?



我错过了什么?我认为表单中定义的字段会自动与我的路由参数相关联。 :-/

更新:

我知道 search_path 是在现在显示表单之前生成的,因此无法更新。事后明显!

我改变了路线:
map.search 'search', :controller => "home", :action => "search"
map.name ':first_name/:last_name', :controller => "home", :action => "name"

而现在 search行动只是:
def search
redirect_to name_path(params)
end

这一切都是一种享受!这里的主要目标是从名为 route 的名称中获取该 URL 作为搜索的结果。谢谢你们!

最佳答案

form_for生成表单,并且必须指定创建 search_path 所需的所有参数,所以它应该是这样的:

<% form_tag(search_path, :firstname => 'some_text', :lastname => 'some_text', :method => 'get') do %>

或者至少是这样的。 HTML 标签 form有参数 action='/some/url'这就是为什么您必须为 search_path 指定所有参数的原因.但是上面的例子不会像你预期的那样工作。

那你能做什么?
  • 创建具有 action='/' 的空表单并在提交之前使用 js 将其替换为输入文本字段的内容。
  • 创建另一个路由,例如 /search从提交中接收参数,然后重定向到正确的路径。

  • 可能还有一些更好的方法来做到这一点;)

    关于ruby-on-rails - 使用带有参数和 form_tag 的命名路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167896/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com