raails 5.1中的form_with搜索字段

时间:2017-03-25 06:35:50

标签: ruby-on-rails ruby-on-rails-5 ruby-on-rails-5.1

在Rails 5.1中,所有表单都必须使用form_with完成。在http://edgeguides.rubyonrails.org/5_1_release_notes.html#unification-of-form-for-and-form-tag-into-form-with中,我只能找到与模型相关的表单示例。

使用form_with在Rails 5.1中完成此Rails 5.0表单的正确方法是什么?

<%= form_tag("/search", method: "get") do %>
  <%= label_tag(:q, "Search for:") %>
  <%= text_field_tag(:q) %>
  <%= submit_tag("Search") %>
<% end %>

3 个答案:

答案 0 :(得分:14)

以下是form_with来电,完全等同于问题的form_tag来电:

<%= form_with url: '/search', method: :get, local: true do |f| %>
  <%= f.label :q, "Search for:" %>
  <%= f.text_field :q, id: :q %>
  <%= f.submit "Search" %>
<% end %>

请注意,form_with默认情况下是通过XHR(也称为remote: true)发送的,您必须添加local: true才能使其行为类似于form_tag的默认{{} 1}}。

rails guidesAPI docsthis github issue discussion中详细了解相关信息。

答案 1 :(得分:5)

form_withrails 5.1中的更新功能及其在rails中创建表单的统一方式,可用作form_forform_with包含某些选项

  

:url - 表单提交的网址。类似于传递给url_for或link_to的值。例如,您可以直接使用命名路由。当a:scope传递时没有:url,表单只提交到当前URL。

     

:方法 - 提交表单时使用的方法,通常是“获取”或“发布”。如果使用“patch”,“put”,“delete”或其他动词,则会添加一个名为_method的隐藏输入来模拟帖子上的动词。

     

:format - 表单提交的路由格式。提交到其他资源类型时很有用,例如:json。如果a:url被传递,则跳过。

     

:范围 - 为输入字段名称添加前缀的范围,以及提交的参数在控制器中的分组方式。

     

:model - 用于推断:url和:scope by的模型对象,另外填写输入字段值。因此,如果title属性设置为“Ahoy!”,则标题输入字段的值将为“Ahoy!”。如果模型是新记录,则生成创建表单,如果现有记录生成更新表单。通过:scope或:url来覆盖默认值。例如。把params [:post]变成params [:article]。

     

:authenticity_token - 在表单中使用的真实性令牌。使用自定义真实性令牌覆盖或传递false以完全跳过真实性令牌字段。提交到可能限制有效字段的支付网关等外部资源时非常有用。远程表单可以通过设置config.action_view.embed_authenticity_token_in_remote_forms = false来省略嵌入的真实性令牌。片段缓存表单时这很有用。远程表单从元标记中获取真实性标记,因此除非您支持没有JavaScript的浏览器,否则不需要嵌入。

     

:local - 默认情况下,表单提交是远程且不引人注目的XHR。   使用local:true。

禁用远程提交      

:skip_enforcing_utf8 - 默认输出名为utf8的隐藏字段   强制执行UTF-8提交。设置为true可跳过该字段。

     

:builder - 覆盖用于构建表单的对象。

     

:id - 可选的HTML ID属性。

     

:class - 可选的HTML类属性。

     

:数据 - 可选的HTML数据属性。

     

:html - 表单标记的其他可选HTML属性。

实施例

<%= form_with(model: @post, url: super_posts_path) %>
<%= form_with(model: @post, scope: :article) %>
<%= form_with(model: @post, format: :json) %>
<%= form_with(model: @post, authenticity_token: false) %>

form_with

的命名空间路由示例

对于命名空间路由,例如admin_post_url:

<%= form_with(model: [ :admin, @post ]) do |form| %>
  ...
<% end %>

与相关资源

如果您的资源已定义关联,例如,您希望在给定路由设置正确的情况下为文档添加注释:

<%= form_with(model: [ @document, Comment.new ]) do |form| %>
  ...
<% end %> 

了解详情doc

答案 2 :(得分:1)

您可以像这样使用form_with

<%= form_with(url: '/search') do |f| %>
  <%= f.label(:q, "Search for:") %>
  <%= f.text_field(:q, id: :q) %>
  <%= f.submit("Search") %>
<% end %>