我试图把头缠绕在这个问题上。我知道观点中没有那么多逻辑。我有一个带有用户,帖子和评论的应用程序。用户有很多帖子和评论。

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

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

<% @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.com返回属于帖子的评论的数组(?)。这意味着我不能让@commenter = @post.comments.userid。我对这个问题感到困惑,所以我可能无法很好地解释它。

有帮助吗?

解决方案

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

其他提示

要更明确地对第一个答案,您只需这样做:

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

在您的用户模型中,覆盖这样的to_s方法,因此请注释。用户返回所需的字符串:

def to_s
  self.login
end

最后,使用急切的加载来获取一个SQL调用中的所有数据,而不是单独查询DB对每个注释。在您的帖子模型中:

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

并在邮政控制器中:

def show
  @post = Post.find(params[:id], :include => :comments)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top