如何使用单个参数构建 rails 表单以平散列
How to build a rails form with a single parameter to flat hash
我有一个看起来像这样的 rails-简单形式:
=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]
直接访问它们?我知道这只有在表单只有一个输入时才有意义。
上下文:
我想做的是允许用户通过上述搜索表单或简短的url(myapp.com/search-text
) 进行搜索。
form_for(或simple_form_for)创建与模型对象关联的表单。传递给控制器的参数将模型名称添加为散列中的键 (params[:search][... fields_in_the_form ...]).
form_tag 只是创建一个表单,它不与任何模型相关联。除了表单中的字段外,它不会向参数散列添加任何键。所以这是创建搜索表单的常用方法。
<%= 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
,您应该使用路由通配符 (http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments) 将您的路由定义为:
get '*search', to: 'static_pages#search'
StaticPagesController#search 方法将接收 params[:search] 以及 myapp.com/ 之后的任何内容。 注意:这应该是你的最后一条路线,因为它匹配任何东西。
我有一个看起来像这样的 rails-简单形式:
=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]
直接访问它们?我知道这只有在表单只有一个输入时才有意义。
上下文:
我想做的是允许用户通过上述搜索表单或简短的url(myapp.com/search-text
) 进行搜索。
form_for(或simple_form_for)创建与模型对象关联的表单。传递给控制器的参数将模型名称添加为散列中的键 (params[:search][... fields_in_the_form ...]).
form_tag 只是创建一个表单,它不与任何模型相关联。除了表单中的字段外,它不会向参数散列添加任何键。所以这是创建搜索表单的常用方法。
<%= 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
,您应该使用路由通配符 (http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments) 将您的路由定义为:
get '*search', to: 'static_pages#search'
StaticPagesController#search 方法将接收 params[:search] 以及 myapp.com/ 之后的任何内容。 注意:这应该是你的最后一条路线,因为它匹配任何东西。