Ruby on rails:每个都可以通过空数组循环吗?

时间:2012-05-23 20:30:03

标签: ruby-on-rails ruby-on-rails-3.2

我一直得到nil的错误未定义方法`comments':第14行的NilClass。这是有问题的代码。

<li>
  <span class="content"><%= micropost.content %></span>
  <span class="timestamp">
    Posted <%= time_ago_in_words(micropost.created_at) %> ago.
  </span>
  <% if current_user?(micropost.user) %>
    <%= link_to "delete", micropost, method:  :delete,
                                     confirm: "You sure?",
                                     title:   micropost.content %>
  <% end %>

  <h2>Comments</h2>

    <% @micropost.comments.each do |comment| %>
      <p>
        <b>Commenter:</b>
        <%= comment.commenter %>
      </p>

      <p>
        <b>Comment:</b>
        <%= comment.body %>
      </p>
    <% end %>


  <h3>Add a comment:</h3>
  <%= form_for([micropost, micropost.comments.build]) do |f| %>
    <div class="field">
      <%= f.label :commenter %><br />
      <%= f.text_field :commenter %>
    </div>
    <div class="field">
      <%= f.label :body %><br />
      <%= f.text_area :body %>
    </div>
    <div class="actions">
      <%= f.submit %>
    </div>
  <% end %>
</li>

就好像你不能通过注释数组调用循环一样,因为它是空的。我尝试添加&lt;%if @ micropost.comments.any? $&GT;在第13行,这样如果没有评论它就不会尝试循环但是我在第13行得到完全相同的错误。我的语法错了吗?

2 个答案:

答案 0 :(得分:4)

@micropost替换为micropost

答案 1 :(得分:0)

是的,每个人都遍历一个空数组,它只是不会真正“迭代”,因为它是空的。