[英]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.