这个IF语句在rails中有什么问题?

时间:2017-07-04 23:43:16

标签: ruby-on-rails

我试图只显示评论,如果有任何评论,因为没有评论,for循环显示这个(底部的哈希表)What comments show with no comments

我的代码中的if语句是

var idClicked = jQuery(this).attr('id');

我的代码有什么问题,即使没有评论它仍会进入for循环?

4 个答案:

答案 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 %>