-1

我們保留我們在app/views/shared庫中的共享部分。組織共享的部分

因此,舉例來說,如果我想顯示特定職位,我可以做以下評論:

app/views/shared/_comment.html.erb

<tr> 
    <td><%= comment.body %></td> 
    <td><%= link_to 'Edit', edit_comment_path(comment) %></td> 
    <td><%= link_to 'Destroy', comment, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
</tr> 

app/views/posts/show.html.erb

. 
. 
. 
    <%= link_to 'Show Comments', '#', id: 'show-comments-link' %> 
    <section id="comments-section"> 

    <table id="comments-table"> 
     <tbody> 
     <%= render partial: 'shared/comment', collection: @comments %> 
     </tbody> 
    </table> 

    </section> 

</section> 

看我怎麼」能夠通過參考位置app/views/shared lib an d 名稱與它的文件名相同,但沒有前面的_或結尾.html.erb

這是這條線就在這裏:

<%= render partial: 'shared/comment', collection: @comments %> 

與泛音工作是Rails所選擇convention over configuration一個很好的例子。這裏有很多約定。

關注文件名,位置和代碼組織(跳過rendering collections)。我覺得從這個Agile Web Development with Rails 5報價是非常有幫助的:

如果第一個選項或:partial參數爲render電話是一個簡單的名字,Rails的假定目標模板是當前控制器的view目錄。但是,如果名稱包含一個或多個/字符,則Rails會假定直到最後一個斜槓的部分是目錄名稱,其餘部分是模板名稱。該目錄被假定爲在app/views之下。這使得跨控制器共享部分和子模板變得很容易。

Rails應用程序之間的約定是將這些共享的部分存儲在名爲shared的子目錄app/views中。

現在我很好奇我應該如何添加一個表單來創建一個新的評論,以放置在comments-section的末尾。

  • 是否也應該把它放在app/views/shared目錄,命名爲_comment_form.html.erb,並繼續其引用爲'shared/comment_form'
  • 我是否應該將所有內容都移動到app/views/comments目錄中,將其命名爲_form.html.erb,並將其引用爲'comments/form'(並且違背shared目錄約定)?
  • 那麼新的評論怎麼樣?我應該在Posts#show行動中創建一個@new_comment = Comment.new嗎?
  • 您可以通過什麼樣的一般指導原則來幫助您決定如何組織您的共享偏好? (也許它應該在shared/comments/_form.html.erb?)

回答

1

首先,沒有明確的指導這一點。這一切都基於您的文件管理首選項。

然而,把資源視圖名稱空間的範圍內'comments/form'您的資源構成(POST/PUT動作相關的項目),使比views/shared爲之傾倒更有意義,因爲它可以得到非常混亂,當所有與相似的名字諧音不同的資源混雜起來。我建議使用命名空間views/shared/comments來保留片段以便循環模板,例如shared/comments/comments_on_homepage,shared/comments/comments_for_admin等。

-1

這也許可以幫助你:

=渲染部分: 「共享/評論」,收藏:@comments,如:評論