显示上次评论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 %>