【问题标题】:rails render collection nests partialrails 渲染集合嵌套部分
【发布时间】:2015-10-22 08:24:09
【问题描述】:

我正在尝试用 rails 渲染出一个集合。 遵循 Rails 指南的 section on the topic 时,这看起来是一个简单的操作。

Partials 在渲染集合时非常有用。当您通过 :collection 选项将集合传递给部分时,将为集合中的每个成员插入一次部分:

所以我要遵循这个建议

<%= render partial: "comments/comment", collection: @post.comments %>

在部分views/comments/_comment.html.erb 中,我有以下所有内容

<div="comment_wrapper">
<p class="comment_name"><%= comment.name %></p>
<p class="comment_date"><%= comment.created_at %></p>
<p class="comment_body"><%= comment.body %></p>
</div>

现在,所有这些部分都以某种方式相互嵌套。 所以假设我有 2 个 cmets,那么它会像这样呈现

<div="comment_wrapper">
<p class="comment_name"><%= comment.name %></p>
<p class="comment_date"><%= comment.created_at %></p>
<p class="comment_body"><%= comment.body %></p>
     <div="comment_wrapper">
     <p class="comment_name"><%= comment.name %></p>
     <p class="comment_date"><%= comment.created_at %></p>
     <p class="comment_body"><%= comment.body %></p>
     </div>
</div>

有人知道为什么会这样吗?以及如何预防?提前致谢

【问题讨论】:

  • 应该是
  • Dios mio,我双手插着头发坐在这里,不理解这种奇怪的行为。感谢您帮助我解决这个愚蠢的错误。我一遍又一遍地忽略它......

标签: ruby-on-rails ruby erb partials


【解决方案1】:

事实上,他们没有。

只是您的浏览器试图理解无效的 HTML 以构建可显示的 DOM。

<div="comment_wrapper">

这是无效的。标签具有可以分配给它们的值的属性。我猜它是关于 CSS 的(所以属性是 idclass)并且页面上显然不止一次出现这种情况(只留下 class):

<div class="comment_wrapper">

还有……

如果您在编写纯 HTML 时遇到困难,您可以切换到某种模板语言,例如 SlimHaml .但是,了解底层语言 (HTML) 有助于自信地构建标记。最重要的是,天哪,这是一种额外的语言!以下是您在 Slim 中的局部外观:

.comment_wrapper
  p.comment_name= comment.name
  p.comment_date= comment.created_at
  p.comment_body= comment.body

考虑一下,如果对您来说太过分了,请随时使用 ERB。

【讨论】:

  • 很抱歉,我打错了字,一次又一次地忽略了它......我敢打赌这发生在我们中最好的人身上,而且我几乎是我们中最好的人;)
  • @sjbuysse 没问题。我只是有机会调试一个类似的案例。不要相信你的浏览器,它可能收到了完全不同的东西:)
猜你喜欢
相关资源
最近更新 更多
热门标签