1

我是 ruby​​ 和 rails 的新手,但是我不知道为什么这不起作用。

我正在做一个带有帖子及其评论的简单博客,一切正常,但我尝试在 Post 模型中使用我自己的方法来获取该帖子中的最新评论。

class Post < ActiveRecord::Base
  attr_accessible :content, :title

  has_many :comments

    def latestComment(id)
        post = Post.find(id)
        comment = post.comments.last
    end
  end

和 index.html.erb

<h1>Hello World!</h1>

<h2>Posts</h2>

<% @posts.each do |post| %>

    <h3><%= link_to post.title, post %></h3>
    <p><%= post.content %></p>

    <%= latestComment = post.latestComment(post) %>

<% end %>

<h3>Add new post</h3>
<%= link_to "Add new post", new_post_path %>

这行得通,它返回一些十六进制值,所以该对象存在,但是我现在想从该对象中获取字段,如下所示

<p><%= latestComment.author %></p>
<p><%= latestComment.content %></p>

它失败了,错误是

undefined method `author' for nil:NilClass

这很奇怪,我不明白为什么我不能访问评论字段..

///comment.rb

class Comment < ActiveRecord::Base
    attr_accessible :author, :content, :post_id

    belongs_to :post
end
4

1 回答 1

2

由于您正在循环访问多个帖子,因此其中一个可能没有任何评论,这使得post.comments.lastreturn nil。您可以通过在尝试呈现评论之前对其进行检查来解决此问题:

class Post < ActiveRecord::Base
  def has_comments?
    comments.count > 0
  end

  def last_comment
    comments.last
  end
end

然后,在视图上:

<% @posts.each do |post| %>

  <h3><%= link_to post.title, post %></h3>
  <p><%= post.content %></p>

  <% if post.has_comments? %>
    <p><%= post.last_comment.author %></p>
    <p><%= post.last_comment.content %></p>
  <% end %>
<% end %>
于 2012-11-10T17:31:53.760 回答