Rails 上的 Ruby 视图遍历 object,即使 object 为 nil
Ruby on Rails view iterates through object even when object is nil
就 ROR 和一般编程而言,我是初学者。我正在阅读文档中的基本入门指南,并正在为博客创建评论视图。在我看来,我有以下代码来呈现一篇文章的所有评论 -
<% @article.comments.each do |comment| %>
<p>
<strong>Commenter: </strong>
<%= comment.commenter %>
</p>
<p>
<strong>Comment: </strong>
<%= comment.body %>
</p>
<% end %>
我无法理解为什么即使没有与特定文章关联的评论,此代码也会呈现 'Commenter:' 和 'Comment:' 标题?!
我也试过将上面的代码包装在 -
<% if @article.comments.all.empty? == false %>
<!--Code Above-->
<% end %>
只是为了试验一下。如果没有评论,这将阻止呈现标题,但是当我添加一条评论时,除了刚刚添加的评论之外,标题会再次呈现。我只需要对此进行解释,以便更好地理解发生了什么。
如果您没有在数据库中保存任何评论 - 它可能是为表单初始化的空白新评论,很可能在评论列表之前呈现。尝试加载现有注释以在控制器操作中分隔实例变量:
@comments = @post.comments
请记住在为表单初始化新评论之前执行此操作。我想它是在视图中用 @article.comments.build
初始化的,所以只需将它们加载到控制器操作中就足够了(顺便说一句,这是正确的地方)。迭代 @comments
以呈现列表:
<% @comments.each do |comment| %>
官方"Getting Started with Rails"指南将表格放在评论列表下方,可能是为了避免初学者遇到此类问题。我并不是说你做错了 - 顶部有表格是可以的,你只需要为此做出调整。
请记住,您始终可以使用 new_record?
and persisted?
方法区分已保存和未保存的 ActiveRecord 对象。
就 ROR 和一般编程而言,我是初学者。我正在阅读文档中的基本入门指南,并正在为博客创建评论视图。在我看来,我有以下代码来呈现一篇文章的所有评论 -
<% @article.comments.each do |comment| %>
<p>
<strong>Commenter: </strong>
<%= comment.commenter %>
</p>
<p>
<strong>Comment: </strong>
<%= comment.body %>
</p>
<% end %>
我无法理解为什么即使没有与特定文章关联的评论,此代码也会呈现 'Commenter:' 和 'Comment:' 标题?!
我也试过将上面的代码包装在 -
<% if @article.comments.all.empty? == false %>
<!--Code Above-->
<% end %>
只是为了试验一下。如果没有评论,这将阻止呈现标题,但是当我添加一条评论时,除了刚刚添加的评论之外,标题会再次呈现。我只需要对此进行解释,以便更好地理解发生了什么。
如果您没有在数据库中保存任何评论 - 它可能是为表单初始化的空白新评论,很可能在评论列表之前呈现。尝试加载现有注释以在控制器操作中分隔实例变量:
@comments = @post.comments
请记住在为表单初始化新评论之前执行此操作。我想它是在视图中用 @article.comments.build
初始化的,所以只需将它们加载到控制器操作中就足够了(顺便说一句,这是正确的地方)。迭代 @comments
以呈现列表:
<% @comments.each do |comment| %>
官方"Getting Started with Rails"指南将表格放在评论列表下方,可能是为了避免初学者遇到此类问题。我并不是说你做错了 - 顶部有表格是可以的,你只需要为此做出调整。
请记住,您始终可以使用 new_record?
and persisted?
方法区分已保存和未保存的 ActiveRecord 对象。