显示上次评论post的用户(Rails)?

我有一个Post模型:

class Post  :destroy end belongs_to :post, :counter_cache => true belongs_to :user end 

用户模型:

 class User  :destroy has_many :comments, :dependent => :destroy end 

评论模型:

 class Comment  true belongs_to :user end 

这是我在index.html.erb视图中显示创建post的用户的方式:

   <div id="post-" class="post"> 

(等等…)

如何显示上次评论post的用户(您可以在StackOverflow和各种论坛中看到)?

之前的答案仅适用于您的post有一些评论。 如果没有评论,那么您将收到错误,正如您所指出的那样。

您可以通过在尝试输出之前测试存在的注释来解决此问题:

 <% @posts.each do |post| %> ... <% if post.comments.empty? %> Nobody has commented yet <% else %> <%= post.comments.last.user.email %> <% end %> <% end %> 
 <% comment = post.comments.order(:created_at).reverse_order.first %> <%= comment.user.email if comment %> 

这样做如下:

它得到post的所有评论,由created_at字段以相反的顺序排序(即顶部的最大值)。 从那里,它选择第一个值,即最新的评论。 从该评论中,您可以获得该user

设置顺序是非可选的,因为如果没有明确指定,数据库可以按任意顺序自由返回元素。 由于存储记录的方式,您将在Postgres或Oracle上比在MySQL或SQLite上更频繁地观察随机顺序。 但是,如果未指定订单,所有这些订单将至少偶尔返回随机元素订单。

 <% @posts.each do |post| %> ... <%= post.comments.last.user.email %> <% end %>