2017-05-05 45 views
0

我正在關注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: :patchrails是否使用方法:: patch用於使用_form.html.erb進行編輯?

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

...現在_form.html.erb文件涵蓋了新&編輯不明確調用PATCH

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

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

是PATCH仍被援引 「幕後」 進行編輯?

回答

1

正如您共享本教程中提到:

我們可以用這個更短的,更簡單的form_for宣言以代替任何的其他形式的原因是@article是對應於全套的資源的RESTful路線,Rails能夠推斷出使用哪個URI和方法。

此外,從給那裏的reference

對於現有的@postresourcerecord,它相當於:

<%= 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 %> 

因此,在這種情況下,關鍵之處是與2個東西的軌道,幫助軌瞭解如何處理這種形式:

  1. 您的模型定義的路由,resources :article
  2. 類型(現有的記錄或新記錄)resource對象傳遞給form_for
1

是的。 form_for檢查模型是否持續知道是否需要執行POST(創建)或PATCH(更新)。