繁体   English   中英

如何将通用搜索表单 (form_with helper) 连接到特定路由并将输入传递给参数 hash?

[英]How do I connect a general search form (form_with helper) to a specific route and pass the input to the params hash?

我在将 form_with 助手连接到特定操作时遇到问题。 我想搜索我的帖子,因此在 posts_controller 中创建了一个搜索操作。 逻辑有效(通过在 url 中手动输入请求进行测试)但我无法从搜索表单的提交按钮执行所述逻辑。

这是路由文件中的路由:

get  '/posts/:search/search' => 'posts#search', as: 'search_post'

在 url 中提交'localhost:3000/posts/1/search'确实会返回我想要的页面和内容,但我希望能够在当前正在呈现但未提交的搜索栏中键入“1”。

这是表单的代码:

<%= form_with url: "/:search/search", method: :get, class: 'nav-link' do |form| %>
  <%= form.text_field :search %>
  <%= form.submit "search" %>
<% end %>

当我输入 URL 模式时,路由和操作确实正常工作。 搜索视图返回正确的结果。 我真的不明白如何在没有 model 的情况下将form_with连接到一个动作。

我已经为 form_with 助手尝试了各种不正确的变体。 我尝试使用url: '/:search/search'添加路径前缀,添加不正确的@search实例...我知道这些都行不通,此时我一直在尝试任何方法。

我想到了!

我缺少的是对表单输入字段上的“名称”属性的理解。 我试图在导致我的搜索操作的路由中集成“:search”(这是我表单中名称属性的值),不知道名称属性默认发送到它所在的 controller 操作发送。

我将路线更改为:

get  '/search' => 'posts#search', as: 'search_post'

我编辑了表格的 url:

<%= form_with url: "/search", method: :get, class: 'nav-link' do |form| %>
  <%= form.text_field :search %>
  <%= form.submit "search" %>
<% end %>

上面将表单输入作为 params[:search] 传递给 controller,假设我将 form.text_field 名称属性设置为:search。

您可以直接将表单 map 发送到 Rails controller 并使用form_tag执行操作。

由于第一个参数接受 hash 的 url 选项,Rails 将(应该)将 map 设为正确的路径:

<%= form_tag { action: "search", controller: "posts" }, { class: "nav-link" } do %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM