如何使用单个参数构建rails表单以进行平面哈希

问题描述 投票:0回答:1

我有一个rails-simpleform,如下所示:

=simple_form_for :search, url: search_path(:search), method: :get  do |f|
  = f.input :q
  = f.submit 'Search'

当我想要检索输入时,我必须访问它:

params[:search][:q]

是否有可能以某种方式构建表单,参数不是嵌套在params[:search]下?这样我可以通过params[:q]直接访问它们?我知道,只有表单只有一个输入才有意义。

背景:

我要做的是允许用户搜索上述搜索表单或通过短网址(myapp.com/search-text)。

ruby-on-rails simple-form
1个回答
1
投票

form_for(或simple_form_for)创建与模型对象关联的表单。传递给控制器​​的参数将模型名称添加为哈希中的键(params [:search] [... fields_in_the_form ...])。

form_tag只是创建一个表单,它不与任何模型相关联。除了表单中的字段外,它不会向params哈希添加任何键。所以这是创建搜索表单的常用方法。

<%= form_tag(search_path, method: :get) do %>
  <%= text_field_tag :term, params[:search] %>
  <%= submit_tag 'Search', name: nil %>
<% end %>

然后你可以在控制器中使用params[:search]

最后,要使用myapp.com/search-text,您应该使用路线globing(http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments)定义您的路线:

get '*search', to: 'static_pages#search'

StaticPagesController#搜索方法将在myapp.com/之后的任何内容中接收参数[:search]。注意:这应该是你的最后一条路线,因为它匹配任何东西。

© www.soinside.com 2019 - 2024. All rights reserved.