rails是否使用方法:: patch使用_form.html.erb进行编辑?

时间:2017-05-05 02:57:00

标签: ruby-on-rails rest erb

我正在关注getting started的Ruby on Rails教程指南,并在5.12 Using partials to clean up duplication in views部分。根据D.R.Y,我理解why partials are used。但是,我很好奇new.html.erb和edit.html.erb的不同之处。具体来说,在使用部分_form.html.erb文件之前,edit.html.erb文件显式调用了method: :patch

<%= form_for :article, url: article_path(@article), method: :patch do |f| %>
  <% if @article.errors.any? %>
    <div id="error_explanation">
...

...现在_form.html.erb文件涵盖了新的&amp;编辑而不显式调用PATCH

<%= form_for @article do |f| %>

  <% if @article.errors.any? %>
    <div id="error_explanation">
...

是否仍在“幕后”调用PATCH进行编辑?

2 个答案:

答案 0 :(得分:2)

是。 form_for检查模型是否持久存在以了解是否需要执行POST(创建)或PATCH(更新)。

答案 1 :(得分:1)

正如您分享的教程中提到的那样:

  

我们可以使用这个更简单,更简单的form_for声明代表其他任何一种形式的原因是@article是一个对应于一整套RESTful路由的资源,Rails能够推断出哪个URI和方法使用

另外,从那里给出reference

对于resource的现有record@post,它相当于:

<%= form_for @post, as: :post, url: post_path(@post), method: :patch, html: { class: "edit_post", id: "edit_post_45" } do |f| %>
  ...
<% end %>

然而,对于资源的新记录,即Post.new,它等同于

<%= form_for @post, as: :post, url: posts_path, html: { class: "new_post", id: "new_post" } do |f| %>
  ...
<% end %>

因此,在这种情况下,魔法在于有两件事的铁轨,帮助铁路了解如何处理这种形式:

  1. 您为模型定义的路线resources :article
  2. 传递给resource的{​​{1}}个对象的类型(现有记录或新记录)。