-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,如:评论