我正在关注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进行编辑?
答案 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 %>
因此,在这种情况下,魔法在于有两件事的铁轨,帮助铁路了解如何处理这种形式:
resources :article
resource
的{{1}}个对象的类型(现有记录或新记录)。