我试图只显示评论,如果有任何评论,因为没有评论,for循环显示这个(底部的哈希表)
我的代码中的if语句是
var idClicked = jQuery(this).attr('id');
我的代码有什么问题,即使没有评论它仍会进入for循环?
答案 0 :(得分:2)
<%= ... %>
会自动输出,因为您在=
之后指定了等号(<%
),如果您指定减号(-
),它将不会自行输出,或者根本没有迹象,仅<%
。我个人更喜欢指定-
,因为它声明了您的意图(SLIM也使用-
)
<%- @article.comments.each do |comment| %>
答案 1 :(得分:2)
您可能在文章上构建了一条新评论,以便创建评论表单在其上方工作,因此问题的症结归结为any?
将查看内存中的关联,如果它存在,如下例所示:
article = Article.create!
=> #<Article id: 1, created_at: "2017-07-05 02:08:31", updated_at: "2017-07-05 02:08:31">
article.comments.any?
=> false
article.comments.build
=> #<Comment id: nil, article_id: 1, created_at: nil, updated_at: nil>
article.comments.any?
=> true
article.comments.exists?
=> false
这就是你首先输入条件的原因,然后正如其他人所指出的那样,你之后输出了循环的结果(迭代了所有记录)。
要解决此问题,您可以使用exists?
代替(在最后一行的示例中也会看到),它将检查数据库,而不包括您刚为表单构建的数据库。
答案 2 :(得分:1)
导致问题的行:<%= @article.comments.each do |comment| %>
。在浏览文章的评论时,您不需要使用<%= %>
。 <% %>
将完成这项工作。
答案 3 :(得分:1)
在erb模板中,
<% %>
用于执行ruby代码(循环,计算,变量赋值等)
<%= %>
用于在生成的HTML模板中打印内容
<%# %>
用于在erb模板上发表评论(未在生成的HTML上打印)
因此,您的erb文件应如下所示:
<h2>Comments</h2>
<% if @article.comments.any? %>
<% @article.comments.each do |comment| %>
<p>
<strong>Commenter:</strong>
<%= comment.commenter %>
</p>
<p>
<strong>Comment:</strong>
<%= comment.comment %>
</p>
<% end %>
<% end %>