一般来说,我是ROR和编程的初学者。我正在编写文档中的基本入门指南,并正在为博客创建评论视图。我在视图中有以下代码来呈现文章的所有评论 -
<% @article.comments.each do |comment| %>
<p>
<strong>Commenter: </strong>
<%= comment.commenter %>
</p>
<p>
<strong>Comment: </strong>
<%= comment.body %>
</p>
<% end %>
我无法理解为什么这段代码会让“评论者”:&#39;和评论:&#39;标题,即使没有与特定文章相关的评论?!
我也尝试将上面的代码包装在 -
中<% if @article.comments.all.empty? == false %>
<!--Code Above-->
<% end %>
只是为了试验它。如果没有评论,这将阻止标题呈现,但是当我添加一条评论时,除了刚添加的评论之外,标题会再次呈现。我只需要对此进行解释,以便更好地了解正在发生的事情。
答案 0 :(得分:1)
如果您没有在数据库中保存任何评论 - 它可能是为表单初始化的空白新评论,很可能在评论列表之前呈现。尝试将现有注释加载到控制器操作中的单独实例变量中:
@comments = @post.comments
在初始化表单的新评论之前,请记住这样做。我想它是在@article.comments.build
的视图中初始化的,所以简单地将它们加载到控制器动作中就足够了(BTW,它是正确的地方)。迭代@comments
以呈现列表:
<% @comments.each do |comment| %>
官方的“Rails入门”指南将表单放在评论列表下方,可能会为初学者提供此类问题。我并不是说你做错了 - 把表格放在首位就行了,你只需要对此进行调整。
请记住,您始终可以使用new_record?
和persisted?
方法对已保存和未保存的ActiveRecord对象进行dinstinguish。