0

我正试图解决这个问题。我知道视图中不应该有那么多逻辑。我有一个包含用户、帖子和评论的应用程序。用户有很多帖子和评论。

class User < ActiveRecord::Base
has_many :posts
has_many :comments

帖子属于用户,有很多评论。

class Post < ActiveRecord::Base
has_many :comments
belongs_to :user

评论属于用户和帖子

class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user

在我的帖子#show 视图中,我在帖子下显示评论。我想显示发表评论的用户的姓名。目前,我认为:

<% @post.comments.each do |comment| %>
  <p>
    <b>Commenter:</b>
    <%= link_to  User.find(comment.userid).login, User.find(comment.userid) %>
  </p>

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

我可能应该在我的帖子控制器中有这个逻辑。但我很困惑。@post.comments 返回属于该帖子的评论数组(?)。这意味着我不能拥有@commenter = @post.comments.userid。我对这个问题感到困惑,所以我可能没有很好地解释它。

4

2 回答 2

4

要更明确地了解第一个答案,您只需执行以下操作:

<%= link_to comment.user, comment.user %>

在您的 User 模型中,像这样覆盖 to_s 方法,以便 comment.user 返回您想要的字符串:

def to_s
  self.login
end

最后,使用即时加载在一个 SQL 调用中获取所有数据,而不是为每个 comment.user 单独查询 DB。在您的 Post 模型中:

class Post < ActiveRecord::Base
  has_many :comments, :include => :user

在 Post 控制器中:

def show
  @post = Post.find(params[:id], :include => :comments)
于 2010-09-26T21:07:43.997 回答
3

事实上,在评论循环期间,您可以使用comment.user获取用户的数据,因为您已经声明了User has_many Comments关系。

于 2010-09-26T15:37:04.410 回答