[英]Using partials in Rails
我正在遵循此官方指南來學習有關Rails的信息,在該地方已構建了博客,並且我發現它似乎還不完整。
在第5.13點“使用局部視圖清除視圖中的重復項”上,建議使用該表格來創建帖子並在局部視圖中進行編輯,因為兩者是如此相似。 它確實說明了兩種形式都使用的路線之間的細微差別,但是它說這是一個問題,稍后將進行解釋。
除了form_for聲明外,其他所有內容均保持不變。 稍后將解釋form_for如何在構建表單時找出正確的操作和方法屬性。 [...]
但我注意到該指南從未真正說明如何執行此操作。 (也許他們只是忘記了...?)
有人可以解釋我該如何解決這個問題?
如果遵循Rails約定,則無需執行任何操作。 在文檔( http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for )中對此進行了很好的解釋。
但是,如果傳遞給form_for的記錄是一種資源,即它對應於一組RESTful路由,例如使用config / routes.rb中的resources方法定義,則可以進一步簡化。 在這種情況下,Rails會簡單地從記錄本身推斷出適當的URL。
基本上,您需要:
form_for
助手 routes.rb
網絡resources :posts
因此,如果您具有form_for(@post)
,Rails將通過檢查@post
是否為新記錄來確定要使用的路由。
如果您想要一個完整的示例,只需創建一個新的Rails應用並創建任何腳手架:
rails g scaffold User name
您可以檢查Rails是否在部分表單中放置了表單: app/views/users/_form.html.erb
。
如果要深入研究,請檢查源代碼。 有趣的部分在此文件中 。
action, method = object.respond_to?(:persisted?) && object.persisted? ? [:edit, :patch] : [:new, :post]
在我們的示例中, @post
被分配給object
。 Rails充滿了這樣的捷徑,有時了解它們的最佳方法是查看源代碼。 如果您對Ruby熟悉,您通常會發現源代碼是文檔和指南的更好解釋。
<%= form_for @product do |f| %>
.
.
.
<% end %>
當@product是新記錄時,Rails會知道它並使用products_path。 但是,當@product存在時,Rails使用product_path(@product)。
它並不能很好地解釋它。 如果您在表單的兩個版本中查找頁面,一個用於new
,一個用於edit
您會看到它們在form_for
之后有兩個不同的代碼段,但是它們都傳遞了@post
變量。 在第一種情況下,變量包含一個新的空Post
對象。
<%= form_for :post, url: posts_path do |f| %>
在edit
版本中,它正在查找記錄,將其放入@post
變量中並將其傳遞給表單。
<%= form_for :post, url: post_path(@post), method: :patch do |f| %>
最終版本(部分版本)沒有額外的代碼來指示它是new
動作還是edit
。 但是由於URL和調用視圖的操作的緣故,Rails知道使用部分表單時將哪些代碼包含在表單中。 更多“ Rails魔術”。
<%= form_for @post do |f| %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.