我們保留我們在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
?)