组织共享的部分
我们保留我们在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
?)
首先,没有明确的指导这一点。这一切都基于您的文件管理首选项。
然而,把资源视图名称空间的范围内'comments/form'
您的资源构成(POST/PUT动作相关的项目),使比views/shared
为之倾倒更有意义,因为它可以得到非常混乱,当所有与相似的名字谐音不同的资源混杂起来。我建议使用命名空间views/shared/comments
来保留片段以便循环模板,例如shared/comments/comments_on_homepage
,shared/comments/comments_for_admin
等。
这也许可以帮助你:
=渲染部分: “共享/评论”,收藏:@comments,如:评论