簡體   English   中英

在Rails中使用局部

[英]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。

基本上,您需要:

  1. 使用form_for助手
  2. 將模型對象傳遞給它(而不是符號)
  3. 在已定義資源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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM